我正在尝试将 XML 文件反序列化为对象数组,但收到空对象。
我的问题看起来与此类似:如何将 xml 反序列化为对象数组? https://stackoverflow.com/questions/7541899/how-to-deserialize-xml-to-an-array-of-objects但我似乎无法创建一个继承 IXmlSerialized 的类。也就是说,我认为这种方法没有必要。
难道我做错了什么?
文件对象
[XmlType("file")]
public class File
{
[XmlElement("id")]
public string Id { get; set; }
[XmlElement("company_name")]
public string Company_Name { get; set; }
[XmlElement("docs")]
public HashSet<doc> Docs { get; set; }
}
文档对象
[XmlType("doc")]
public class Doc
{
[XmlElement("valA")]
public string ValA { get; set; }
[XmlElement("valB")]
public string ValB { get; set; }
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<files>
<file>
<id>12345</id>
<company_name>Apple</company_name>
<docs>
<doc>
<valA>Info</valA>
<valB>More Info</valB>
</doc>
</docs>
</file>
<file>
<id>12345</id>
<company_name>Microsoft</company_name>
<docs>
<doc>
<valA>Even More Info</valA>
<valB>Lots of it</valB>
</doc>
</docs>
</file>
</files>
反序列化代码
XmlSerializer mySerializer = new XmlSerializer(typeof(File[]), new XmlRootAttribute("files"));
using (FileStream myFileStream = new FileStream("Files.xml", FileMode.Open))
{
File[] r;
r = (File[])mySerializer.Deserialize(myFileStream);
}
您已装饰您的房产XMLAttribute
但它们是 XML 中的元素。所以,改变一切XMLAttribute
to XmlElement
.
[XmlType("file")]
public class File
{
[XmlElement("id")]
public string Id { get; set; }
[XmlElement("company_name")]
public string Company_Id { get; set; }
[XmlArray("docs")]
public HashSet<Doc> Docs { get; set; }
}
[XmlType("doc")]
public class Doc
{
[XmlElement("valA")]
public string ValA { get; set; }
[XmlElement("valB")]
public string ValB { get; set; }
}
另外,您的 XML 格式不正确。我想这是错字——
<company_name>Apple</company_id>
<company_name>Microsoft</company_id>
结束标签应该是company_name
-
<company_name>Apple</company_name>
<company_name>Microsoft</company_name>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)