C#无法反序列化xml以返回通用列表

问题描述 投票:0回答:1

我尝试从xml文件加载列表。我有不同的自定义类列表和不同的xml文件。该计划是要创建一种方法来像这样反序列化所有这些方法:

ListDependencies.Deserialize(DependenciesPath);
ListProfessions.Deserialize(ProfessionsPath);
ListCategories.Deserialize(CategoriesPath);
...

反序列化时,我得到xml文件格式意外的错误。

    public static List<T> Deserialize<T>(this T value, string _path)
    {
        var xmlserializer = new XmlSerializer(typeof(List<T>));

        using (StreamReader sr = new StreamReader(_path, Encoding.Unicode))
        {
            using (var reader = XmlReader.Create(sr.BaseStream))
            {
                return (List<T>)xmlserializer.Deserialize(reader);
            }
        }
    }

内部例外:

{"<ArrayOfDependencyObject xmlns=''> was not expected."} System.Exception {System.InvalidOperationException}

XmlContent:

<ArrayOfDependencyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DependencyObject>
    <Profession>80dd893e-9eb6-42c6-9b60-a61b87df0d1b</Profession>
    <Dependency>f76c72be-f2da-435b-b1f8-a4775c0bc1f1</Dependency>
  </DependencyObject>
  <DependencyObject>
    <Profession>8ab9b108-dd4b-4639-b323-c7a6c28f1314</Profession>
    <Dependency>9b86ff1d-c1de-4f95-adc8-413a94714cc0</Dependency>
  </DependencyObject>
  <DependencyObject>
    <Profession>5a273efa-eb29-4ea0-bd1d-2bb84727aa1e</Profession>
    <Dependency>954bd3d6-e78e-424e-bd69-8b46f239c5f2</Dependency>
  </DependencyObject>
</ArrayOfDependencyObject>

有人可以帮我吗?

c# xml deserialization generic-list
1个回答
0
投票

我从XML中看到的是一个带有元素数组的对象。如下更改Deserialize方法,然后重试

public static T Deserialize<T>(this T value, string _path)
{
    var xmlserializer = new XmlSerializer(typeof(T));

    using (StreamReader sr = new StreamReader(_path, Encoding.Unicode))
    {
        using (var reader = XmlReader.Create(sr.BaseStream))
        {
            return (T)xmlserializer.Deserialize(reader);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.