Как использовать XmlElementAttribute для List <T>? - PullRequest
7 голосов
/ 24 июня 2011

У меня есть такой класс:

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

Это значит, что я потерял родительский узел. Указанное мной имя элемента становится именем узла. Почему это? как заставить это работать?

1 Ответ

14 голосов
/ 24 июня 2011

Попробуйте это:

public class Test
{
    [XmlArray("Levels")]
    [XmlArrayItem("L")]
    public LevelList CalLevelList { get; set; }
}
...