2009-01-30 12 views
5

Estoy tratando de serializar una clase personalizada que necesita usar varios elementos del mismo nombre.
He intentado usar xmlarray, pero los envuelve en otros elementos.XmlSerialization Collection as Array

Quiero que mi xml se vea así.

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

Mi código:

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

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

¿Ha intentado establecer el atributo XmlArrayItem (typeof (System.String)) junto con XMLArray? – Perpetualcoder

+0

sí, se crea algo así como el XML siguiente un texto algo más de texto

+0

Buena pregunta, mal título. El título debe ser "Cómo aplanar una matriz/lista/colección con XmlSerializer" –

Respuesta

7

intente Es usando [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"); 
    } 
} 

Nota cambié a ArrayListList<string> para limpiar la salida; en 1.1, StringCollection sería otra opción, aunque tiene diferentes reglas de distinción entre mayúsculas y minúsculas.

+0

esto funciona perfectamente gracias –

+0

¡Gracias! ¡Exactamente lo que estaba buscando! –

0

(edit: obsoleto - mi second post ([XmlElement]) es el camino a seguir - Me voy esto para la posteridad en el uso de xsd.exe)

xsd.exe es tu amigo. Copiar el código XML que desea en un archivo(), a continuación, utilizar:

xsd foo.xml 
xsd foo.xsd /classes 

Ahora lee foo.cs; puedes usar esto directamente o solo para inspirarte.

(edit: snipped de salida - no es útil más)