私はこのようなクラスを持っています:
public class Level
{
[XmlAttribute]
public string Guid { get; set; }
}
public class LevelList : List<Level>
{
}
public class Test
{
public LevelList CalLevelList { get; set; }
}
XmlSerializer を使用すると、次のような出力が得られます。
<CalLevelList>
<Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
</CalLevelList>
これは技術的に正しいです。ただし、クラス名を変更せずに、出力を次のようにしたいと思います。
<Levels>
<L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
</Levels>
これは属性を介して実行できることは知っていますが、方法がわかりませんでした。次のように Test クラスに属性を追加すると:
public class Test
{
[XmlElement("Levels")]
public LevelList CalLevelList { get; set; }
}
出力は非常に驚くべきものです。
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
つまり、親ノードを失いました。指定した要素名がノード名になります。なぜこれ?それを機能させる方法は?