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" />

親はグループのIDを示します。

グループのコンストラクターは次のようになります。

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ただし、親と親 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));

これはあなたが必要とすることをするはずです。

于 2010-04-12T11:56:29.053 に答える