[英]How to de-serialize XML with many child nodes
如果我的XML是這樣的:
<Item>
<Name>Jerry</Name>
<Array>
<Item>
<Name>Joe</Name>
</Item>
<Item>
<Name>Sam</Name>
</Item>
</Array>
</Item>
我可以將其序列化為此類:
[DataContract(Namespace = "", Name = "dict")]
public class Item
{
[DataMember(Name = "Name")]
public string Name { get; set; }
[DataMember(Name = "Array")]
public IEnumerable<Item> Children { get; set; }
}
但是,如果我的XML像這樣怎么辦?
<Item>
<Name>Jerry</Name>
<Item>
<Name>Joe</Name>
</Item>
<Item>
<Name>Sam</Name>
</Item>
</Item>
這不起作用:
[DataContract(Namespace = "", Name = "Item")]
public class Item
{
[DataMember(Name = "Name")]
public string Name { get; set; }
[DataMember(Name = "Item")]
public IEnumerable<Item> Children { get; set; }
}
什么是裝飾教室的正確方法?
如果要控制xml,則可以使用XmlSerializer
而不是DataContractSerializer
。 后者只是缺少XmlSerializer
提供的細粒度控制; 在這種情況下,對於列表/數組布局之類的東西-但即使是xml屬性 ,對於DataContractSerializer
也是一個問題。 然后就是:
public class Item {
public string Name { get; set; }
[XmlElement("Item")]
public List<Item> 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.