XML反复杂化对象的反序列化

时间:2010-04-12 09:08:51

标签: c# .net xml-deserialization

我有这样的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获取父级并传入组?

1 个答案:

答案 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));

这应该做你需要的。