Коллекция XmlSerialization как массив

Я пытаюсь сериализовать настраиваемый класс, который должен использовать несколько элементов с одним и тем же именем.
Я пробовал использовать xmlarray, но он помещает их в другие элементы.

Я хочу, чтобы мой xml выглядел так.

<root>
     <trees>some text</trees>
     <trees>some more text</trees>
</root>

Мой код:

[Serializable(), XmlRoot("root")]
public class test
{
      [XmlArray("trees")]
      public ArrayList MyProp1 = new ArrayList();

      public test()
      {
           MyProp1.Add("some text");
           MyProp1.Add("some more text");  
      }
}

person Community    schedule 30.01.2009    source источник
comment
вы пробовали установить атрибут XmlArrayItem (typeof (System.String)) вместе с XMLArray?   -  person Perpetualcoder    schedule 30.01.2009
comment
да, он создает что-то вроде xml ниже ‹root› ‹tree› ‹string› какой-то текст ‹/string› ‹string› еще текст ‹/string› ‹/tree› ‹/root›   -  person    schedule 31.01.2009
comment
Хороший вопрос, плохое название. Заголовок должен быть следующим: Как сгладить массив / список / коллекцию с помощью XmlSerializer   -  person Giulio Vian    schedule 02.09.2011


Ответы (2)


Попробуйте просто использовать [XmlElement("trees")]:

[Serializable(), XmlRoot("root")]
public class test
{
    [XmlElement("trees")]
    public List<string> MyProp1 = new List<string>();

    public test()
    {
        MyProp1.Add("some text");
        MyProp1.Add("some more text");
    }
}

Примечание. Я изменил ArrayList на List<string>, чтобы очистить вывод; в 1.1 StringCollection будет другим вариантом, хотя в нем другие правила чувствительности к регистру.

person Marc Gravell    schedule 31.01.2009
comment
Спасибо! Именно то, что я искал! - person Simon Gillbee; 19.06.2009

(редактировать: устарело - мой второй пост ([XmlElement]) - это то, что нужно - Я оставляю это потомкам в использовании xsd.exe)

xsd.exe - ваш друг. Скопируйте нужный xml в файл (foo.xml), затем используйте:

xsd foo.xml
xsd foo.xsd /classes

Теперь прочтите foo.cs; вы можете использовать это либо напрямую, либо просто для вдохновения.

(править: вывод отрезан - больше бесполезен)

person Marc Gravell    schedule 31.01.2009