7

私はこのようなクラスを持っています:

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

つまり、親ノードを失いました。指定した要素名がノード名になります。なぜこれ?それを機能させる方法は?

4

1 に答える 1

15

これを試して:

public class Test
{
    [XmlArray("Levels")]
    [XmlArrayItem("L")]
    public LevelList CalLevelList { get; set; }
}
于 2011-06-24T01:09:00.620 に答える