我有这样的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/

10-13 06:29