Коллекция XmlSerialization как массив - PullRequest
5 голосов
/ 30 января 2009

Я пытаюсь сериализовать пользовательский класс, который должен использовать несколько элементов с одинаковым именем.
Я пытался использовать 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");  
      }
}

Ответы [ 2 ]

7 голосов
/ 01 февраля 2009

Попробуйте просто использовать [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 будет другим вариантом, хотя в нем применяются другие правила учета регистра.

0 голосов
/ 31 января 2009

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

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

xsd foo.xml
xsd foo.xsd /classes

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

(редактировать: вывод обрезан - больше не нужен)

...