如何使用许多子节点反序列化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。