如果我的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; }
}
装修课程的正确方法是什么?
答案 0 :(得分: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; }
}
和
var serializer = new XmlSerializer(typeof(Item));
var item = (Item) serializer.Deserialize(source);
答案 1 :(得分:0)
尝试使用CollectionDataContractAttribute 在内部,您应该创建一个通用的Items列表,并使用适当的参数将其装饰为CollectionDataContractAttribute。