在根元素中使用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); } } }