C# 在C中反序列化时获取InvalidOperationException#

C# 在C中反序列化时获取InvalidOperationException#,c#,xml-serialization,xml-deserialization,invalidoperationexception,C#,Xml Serialization,Xml Deserialization,Invalidoperationexception,我正在使用一个基于XML的.config文件来存储一些记录。 我的XML如下: <?xml version="1.0" encoding="utf-8"?> <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Configuration> <

我正在使用一个基于XML的.config文件来存储一些记录。 我的XML如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Configuration>
        <Name>1st Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>1.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>2.0</Version>
        </Binary>
    </Configuration>
      <Configuration>
        <Name>2nd Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>2.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>4.0</Version>
        </Binary>
    </Configuration>
</Data_List>
public Binary
{
public String Field;
public String Version;
}

public Configuration
{
public String Name;
public List<Binary> Binary_List = new List<Binary>();

public GetfromXML()
{
List<Configuration> lists = new List<Configuration>();
TextReader reader = new StreamReader("Data_List.config");
XmlSerializer serializer = new XmlSerializer(typeof(List<Configuration>));
lists=(List<Configuration>)serializer.Deserialize(reader);
reader.Close();
}

第一周
字段1
1
字段2
2
第二周
字段1
2
字段2
4
我使用的C代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Configuration>
        <Name>1st Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>1.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>2.0</Version>
        </Binary>
    </Configuration>
      <Configuration>
        <Name>2nd Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>2.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>4.0</Version>
        </Binary>
    </Configuration>
</Data_List>
public Binary
{
public String Field;
public String Version;
}

public Configuration
{
public String Name;
public List<Binary> Binary_List = new List<Binary>();

public GetfromXML()
{
List<Configuration> lists = new List<Configuration>();
TextReader reader = new StreamReader("Data_List.config");
XmlSerializer serializer = new XmlSerializer(typeof(List<Configuration>));
lists=(List<Configuration>)serializer.Deserialize(reader);
reader.Close();
}
公共二进制文件
{
公共字符串字段;
公共字符串版本;
}
公共配置
{
公共字符串名称;
公共列表二进制_List=新列表();
公共GetfromXML()
{
列表=新列表();
TextReader=newstreamreader(“Data_List.config”);
XmlSerializer serializer=新的XmlSerializer(typeof(List));
lists=(List)序列化程序。反序列化(reader);
reader.Close();
}
我收到一个异常,说“XML文档(2,2)中有一个错误”。
有人能帮忙吗?

我认为问题在于您的模型没有很好地结构化。换句话说,序列化程序不知道如何读取您的.xml

您的xml错误。当您有列表时,将出现:

    <ArrayOfT></ArrayOfT>
  • 使用属性而不是变量。因为以后可能需要绑定
  • 我如何解决该问题的代码示例:

    public ServiceMap Deserialize()
        {
            ServiceMap serviceMap = new ServiceMap();
    
            try
            {
                using (var fileStream = new FileStream(Settings.ServiceMapPath, FileMode.Open))
                {
                    XmlReaderSettings settings = new XmlReaderSettings();
                    settings.IgnoreComments = true;
    
                    using (XmlReader reader = XmlReader.Create(fileStream, settings))
                    {
                        serviceMap = _serializer.Deserialize(reader) as ServiceMap;
                    }
                }
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("File 'ServiceMap.xml' could not be found!");
            }
    
            return serviceMap;
        }
    
    我的ServiceMap类:

        [XmlRoot("ServiceMap")]
    public class ServiceMap
    {
        [XmlArray("Nodes")]
        [XmlArrayItem("Node")]
        public List<Node> Nodes = new List<Node>();
    
        [XmlArray("Groups")]
        [XmlArrayItem("Group")]
        public List<Group> Groups = new List<Group>();
    
        [XmlArray("Categories")]
        [XmlArrayItem("Category")]
        public List<Category> Categories = new List<Category>();
    }
    
    [XmlRoot(“ServiceMap”)]
    公共类服务映射
    {
    [XmlArray(“节点”)]
    [XmlArrayItem(“节点”)]
    公共列表节点=新列表();
    [XmlArray(“组”)]
    [XmlArrayItem(“集团”)]
    公共列表组=新列表();
    [XmlArray(“类别”)]
    [XmlArrayItem(“类别”)]
    公共列表类别=新列表();
    }
    
    编辑:我的XML:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://   www.w3.org/2001/XMLSchema">
      <Nodes>
        <Node Name="Predrag">
      <Children>
        <Child>dijete1</Child>
        <Child>dijete2</Child>
        <Child>dijete3</Child>
        <Child>dijete4</Child>
      </Children>
      <Parents>
        <Parent>roditelj1</Parent>
        <Parent>roditelj2</Parent>
        <Parent>roditelj3</Parent>
      </Parents>
      <Group Name="Grupa" />
      <Category Name="Kategorija" />
    </Node>
    <Node Name="Tami">
      <Children>
        <Child>dijete1</Child>
        <Child>dijete2</Child>
      </Children>
      <Parents>
        <Parent>roditelj1</Parent>
      </Parents>
      <Group Name="Grupa2" />
      <Category Name="Kategorija2" />
    </Node>
    
    
    迪杰特1
    dijete2
    dijete3
    dijete4
    roditelj1
    roditelj2
    roditelj3
    迪杰特1
    dijete2
    roditelj1
    

    查看消息以及exception的InnerException属性,它应该准确地指出错误所在。此外,从外观上看,它不需要标记。它是否提供了更多信息,例如错误是什么?我建议您将序列化从图片中删除-是否可以将文档作为XML文档加载以启动with?您是如何生成XML数据的?请在发布代码时使用复制/粘贴。这不会编译。您能提供您正在使用的XML文件吗?我仍然无法获取,因为我觉得模型是结构化的。当然,在这里(在上面的帖子中):)