如何使用许多子节点反序列化XML

如果我的XML是这样的:

 Jerry   Joe   Sam    

我可以将它序列化为这个类:

 [DataContract(Namespace = "", Name = "dict")] public class Item { [DataMember(Name = "Name")] public string Name { get; set; } [DataMember(Name = "Array")] public IEnumerable Children { get; set; } } 

但是,如果我的XML是这样的呢?

  Jerry  Joe   Sam   

这不起作用:

 [DataContract(Namespace = "", Name = "Item")] public class Item { [DataMember(Name = "Name")] public string Name { get; set; } [DataMember(Name = "Item")] public IEnumerable Children { get; set; } } 

装修课程的正确方法是什么?

如果你想控制xml,那么XmlSerializer是要走的路,而不是DataContractSerializer 。 后者只是缺乏XmlSerializer提供的细粒度控制; 在这种情况下,像列表/数组布局 – 但即使只是xml属性DataContractSerializer的问题。 那就是:

 public class Item { public string Name { get; set; } [XmlElement("Item")] public List Children { get; set; } } public class Item { public string Name { get; set; } } 

和:

 var serializer = new XmlSerializer(typeof(Item)); var item = (Item) serializer.Deserialize(source); 

尝试使用CollectionDataContractAttribute在内部,您应该创建一个通用的Items列表,并使用适当的参数将其装饰为CollectionDataContractAttribute。