将XML反序列化为对象数组

我正在尝试将XML文件反序列化为对象数组,但我正在接收空对象。 我的问题看起来类似于: 如何将xml反序列化为一个对象数组? 但我似乎无法创建一个inheritanceIXmlSerializable的类。 也就是说,我不认为这种方法是必要的。

难道我做错了什么?

文件对象

[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 Docs { get; set; } } 

Doc对象

  [XmlType("doc")] public class Doc { [XmlElement("valA")] public string ValA { get; set; } [XmlElement("valB")] public string ValB { get; set; } } 

XML

    12345 Apple   Info More Info     12345 Microsoft   Even More Info Lots of it     

反序列化代码

 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更改为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 Docs { get; set; } } [XmlType("doc")] public class Doc { [XmlElement("valA")] public string ValA { get; set; } [XmlElement("valB")] public string ValB { get; set; } } 

你的XML也不是很好。 我猜这是错字 –

 Apple Microsoft 

结束标记应为company_name

 Apple Microsoft 

我会用xml解析器..

 XDocument doc=XDocument.Load(url); File[] r=doc.Elements("file") .Select(f=> new File { Id=f.Element("id").Value, Company_Id=f.Element("company_name").Value, Docs=new HashSet( f.Elements("docs") .Elements("doc") .Select(d=> new Doc { ValA=d.Element("valA").Value, ValB=d.Element("valB").Value })) }).ToArray();