views:

667

answers:

2

I'm trying to serialize a custom class that needs to use multiple elements of the same name.
I've tried using xmlarray, but it wraps them in another elements.

I want my xml to look like this.

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

My code:

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

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

(edit: obsoleted - my second post ([XmlElement]) is the way to go - I'm leaving this for posterity in using xsd.exe)

xsd.exe is your friend. Copy the xml you want into a file (foo.xml), then use:

xsd foo.xml
xsd foo.xsd /classes

Now read foo.cs; you can use this either directly, or just for inspiration.

(edit: output snipped - not helpful any more)

Marc Gravell
+4  A: 

Try just using [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");
    }
}

Note I changed ArrayList to List<string> to clean up the output; in 1.1, StringCollection would be another option, although that has different case-sensitivity rules.

Marc Gravell
this works perfectly thanks
Thank you! Exactly what I was looking for!
Simon Gillbee