Сериализация общей коллекции с указанием имен элементов для элементов в коллекции - PullRequest
0 голосов
/ 13 мая 2010

У меня есть простой класс, полученный из общего списка строк следующим образом:

[Serializable]
[System.Xml.Serialization.XmlRoot("TestItems")]
public class TemplateRoleCollection : List<string>
{

}

при сериализации я получаю следующий XML:

<TestItems>
  <string>cat</string>
  <string>dog</string>
  <string>wolf</string>
</TestItems>

Есть ли способ переопределить имя элемента xml, которое используется для сериализации элементов в коллекции? Я хотел бы, чтобы был произведен следующий xml:

<TestItems>
  <TestItem>cat</TestItem>
  <TestItem>dog</TestItem>
  <TestItem>wolf</TestItem>
</TestItems>

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

Вы не указываете это на уровне класса, вы указываете это на уровне свойства и используете XmlArrayItemAttribute:

public class ContainerClass
{
    [XmlArray("TestItems")]
    [XmlArrayItem("TestItem")]
    public List<string> TemplateRoles { get; set; }
}

Также обратите внимание, что [Serializable] не влияет на сериализацию XML, он используется для двоичной или DataContract сериализации.

0 голосов
/ 15 октября 2014

Полученный ответ не всегда работал для меня, так как мне нужно было наследовать непосредственно от List. Я опубликовал аналогичный вопрос и был направлен на этот ответ Изменить имя XmlElement для сериализации XML , что позволяет вам сделать это.

...