如果我的 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; }
}
怎样装饰类(class)才是正确的?
最佳答案
如果你想控制 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);
关于c# - 如何反序列化具有许多子节点的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219700/