簡體   English   中英

如何使用許多子節點反序列化XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM