我有这样的xml结构:
<Group id="2" name="Third" parentid="0" />
<Group id="6" name="Five" parentid="4" />
<Group id="3" name="Four" parentid="2" />
<Group id="4" name="Six" parentid="1" />
父代表示组的ID。
组的构造函数的内容如下:
public Group(string name, int ID, Group parent)
反序列化时,如何使用ID取得父项并传递给组?
最佳答案
如果使用的是内置处理,则XmlSerializer
仅真正要使用默认构造函数。您可以通过以下方式实现:
public class Group {
public Group() {}
[XmlAttribute("id")]
public int Id {get;set;}
[XmlAttribute("name")]
public string Name {get;set;}
[XmlAttribute("parentid")]
public int ParentId {get;set;}
}
但请注意,
Group
父代与父代ID之间存在很大差异。我怀疑最好的方法是要么以更分层的方式写入数据,要么继续使用现有的数据,但是在反序列化期间使用简单的DTO。然后将这些数据转换为下一步所需的数据。因此,如果您有:List<GroupDTo> groups = ...
您可以将其翻译为:
var actualGroups = from group in groups
select new Group(group.Id, group.Name,
groups.FirstOrDefault(x => x.Id == group.ParentId));
这应该做您需要的。
关于c# - 复杂对象的XML反序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2620881/