在根元素中使用XmlSerializer和数组

我有一个类似于以下的XML文档:

  ...   ...  ...  

我希望使用System.Xml.Serialization属性来简化XML反序列化。 我遇到的问题是我无法弄清楚如何指定根节点包含一个数组。

我尝试过创建以下类:

 [XmlRoot("scan_details")] public class ScanDetails { [XmlArray("object")] public ScanDetail[] Items { get; set; } } public class ScanDetail { [XmlAttribute("name")] public string Filename { get; set; } } 

但是,当我将XML反序列化为ScanDetails对象时, Items数组保持为null

如何反序列化根节点中的数组?

你应该使用[XmlElement] ,而不是[XmlArray]来装饰Items属性 – 它已经是一个数组,你只想设置元素名称。

 public class StackOverflow_12924221 { [XmlRoot("scan_details")] public class ScanDetails { [XmlElement("object")] public ScanDetail[] Items { get; set; } } public class ScanDetail { [XmlAttribute("name")] public string Filename { get; set; } } const string XML = @"      "; public static void Test() { XmlSerializer xs = new XmlSerializer(typeof(ScanDetails)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML)); var obj = xs.Deserialize(ms) as ScanDetails; foreach (var sd in obj.Items) { Console.WriteLine(sd.Filename); } } }