我有这样的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" />
parent表示Group的ID。
Group的构造函数如下:
public Group(string name, int ID, Group parent)
在反序列化时,如何使用Id获取父级并传入组?
答案 0 :(得分:1)
如果您正在使用内置处理,那么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));
这应该做你需要的。