反序列化具有多个值的XML
反序列化具有多个值的XML
我正在使用C#中带有复杂元素的XML反序列化作为参考。我注意到有很多关于反序列化XML的讨论,但它们没有提到标签中包含多个值的情况。
我正在尝试将我的xml反序列化为对象数组。
我遇到了一个“在xml文档中有一个错误(1,2)”的错误。
我有一个通过HTTP GET请求检索到的格式化的xml字符串,如下所示:
...
我有以下代码会一直抛出异常:
"An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll"
异常是由以下代码引发的:
temp = (Test)new XmlSerializer(typeof(Test)).Deserialize(rdr);
但我不知道如何调试以找到错误。以下是完整的代码:
XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xmlstring); XmlNodeList list = xmldoc.GetElementsByTagName("lvl2"); for (int i = 0; i < list.Count; i++) { Test temp = new Test(); using (XmlReader rdr = XmlReader.Create(new StringReader(list[i].InnerXml))) { temp = (Test)new XmlSerializer(typeof(Test)).Deserialize(rdr); // 在这里引发异常 } Console.WriteLine(temp.id); Console.WriteLine(temp.overall.x); } [XmlRoot("lvl3")] public class Test{ [XmlAttribute("id")] public string id { get; set; } [XmlAttribute("name")] public string name { get; set; } [XmlElement(ElementName = "lvl4a")] public Overall overall { get;set; } } public class Overall { [XmlAttribute("x")] public string x { get; set; } [XmlAttribute("y")] public string y { get;set; } [XmlAttribute("z")] public string z { get;set; } }
问题的原因是Test
类中没有为val1
和val2
属性设置公共属性,导致无法反序列化具有多个值的XML数据。解决方法是要么修复Test
类,为val1
和val2
属性设置公共属性,要么从XML中删除这些属性。XML的架构应与类结构相匹配。
以下是解决问题的代码示例:
public class Test { public string val1 { get; set; } public string val2 { get; set; } } // Deserialize XML with multiple values XmlSerializer serializer = new XmlSerializer(typeof(Test)); Test test; using (StreamReader reader = new StreamReader("yourXmlFile.xml")) { test = (Test)serializer.Deserialize(reader); } // Access the deserialized values Console.WriteLine(test.val1); Console.WriteLine(test.val2);
在上述示例中,我们首先修复了Test
类,为val1
和val2
属性设置了公共属性。然后,我们使用XmlSerializer
类将XML文件反序列化为Test
对象。最后,我们可以访问反序列化后的val1
和val2
属性的值,并进行进一步处理。
请注意,如果XML的架构与类结构不匹配,仍然会导致反序列化失败。因此,在进行反序列化操作之前,请确保XML的架构与类结构一致。