2010-01-06 12 views
6

Afortunadamente una pregunta con una respuesta muy simple, pero no es una que he podido encontrar. Tengo un pequeño documento XML que se ve más o menos así:En C# cómo puedo deserializar un documento XML que contiene una lista de elementos sin un elemento de lista circundante

<aa> 
    <bb><name>bb1</name></bb> 
    <bb><name>bb2</name></bb> 
    <bb><name>bb3</name></bb> 
</aa> 

tengo clases que representan aa y bb

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlArray("bbs")] 
    [XmlArrayItem("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 

Cuando trato de deserializar el documento usando un XmlSerializer consigo un objeto a bis con una propiedad null bbs. como yo lo entiendo que esto es debido a que los atributos que he usado en la propiedad bbs le dicen al serializador esperar que un documento como este:

<aa> 
    <bbs> 
    <bb><name>bb1</name></bb> 
    <bb><name>bb2</name></bb> 
    <bb><name>bb3</name></bb> 
    </bbs> 
</aa> 

Dado que no puedo cambiar el formato del XML que estoy recibiendo, es ¿Hay alguna manera de decirle al XmlSerialiser que espere una matriz que no esté dentro de otra etiqueta?

Respuesta

8

Trate de reemplazar sus [XmlArray("bbs")] y [XmlArrayItem("bb")] atributos con un único [XmlElement] atribuir

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlElement("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 

Al poner el Array y ArrayItem atributos en, que estaban describiendo explícitamente cómo serializar esto como una matriz con una contenedor de embalaje.

+0

Perfecto, gracias – Dan

4

Cambie su [XmlArray]/[XmlArrayItem] a [XmlElement], que indica al serializador que los elementos no tienen envoltorio, p.

[XmlRoot("aa")] 
public class aa 
{ 
    [XmlElement("bb")] 
    public bb[] bbs; 
} 

public class bb 
{ 
    [XmlElement("name")] 
    public string Name; 
} 
Cuestiones relacionadas