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

Jer*_*xon 5 c# xml serialization deserialization

如果我的XML是这样的:

<Item>
    <Name>Jerry</Name>
    <Array>
        <Item>
            <Name>Joe</Name>
        </Item>
        <Item>
            <Name>Sam</Name>
        </Item>
    </Array>
</Item>
Run Code Online (Sandbox Code Playgroud)

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

[DataContract(Namespace = "", Name = "dict")]
public class Item
{
    [DataMember(Name = "Name")]
    public string Name { get; set; }
    [DataMember(Name = "Array")]
    public IEnumerable<Item> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

<Item>
    <Name>Jerry</Name>
    <Item>
        <Name>Joe</Name>
    </Item>
    <Item>
        <Name>Sam</Name>
    </Item>
</Item>
Run Code Online (Sandbox Code Playgroud)

这不起作用:

[DataContract(Namespace = "", Name = "Item")]
public class Item
{
    [DataMember(Name = "Name")]
    public string Name { get; set; }
    [DataMember(Name = "Item")]
    public IEnumerable<Item> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

如果你想控制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; }
}
Run Code Online (Sandbox Code Playgroud)

和:

var serializer = new XmlSerializer(typeof(Item));
var item = (Item) serializer.Deserialize(source);
Run Code Online (Sandbox Code Playgroud)

  • `System.Xml.Serialization.XmlSerializer`**是WP7**的一部分.您需要添加对System.Xml.Serialization.dll的引用才能使用它. (2认同)