2

我有这样的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 表示组的 ID。

Group 的构造函数如下所示:

public Group(string name, int ID, Group parent)

反序列化时,如何使用 Id 获取父级并传递到组中?

4

1 回答 1

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但请注意,父母和父母身份之间存在很大差异。我怀疑最好的方法是以更分层的方式编写数据,或者坚持你所拥有的,但在反序列化期间使用简单的 DTO。然后在下一阶段将这些数据转换为您真正想要的。所以,如果你有:

List<GroupDTo> groups = ...

您可以将其翻译为:

var actualGroups = from group in groups
                   select new Group(group.Id, group.Name,
                      groups.FirstOrDefault(x => x.Id == group.ParentId));

这应该做你需要的。

于 2010-04-12T11:56:29.053 回答