2010-01-06 22 views
6

Si spera che una domanda con una risposta molto semplice, ma non è uno che sono stato in grado di trovare. Ho un documento XML piccola che assomiglia più o meno in questo modo:In C# come posso deserializzare un documento XML contenente un elenco di elementi senza un elemento di elenco circostante

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

ho classi che rappresentano AA e BB

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

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

Quando provo a deserializzare il documento utilizzando un XmlSerializer ottengo un oggetto aa con una proprietà null bbs. se ho capito bene questo è perché gli attributi che ho usato sulla proprietà bbs dicono al serializzatore di aspettarsi un documento come questo:

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

Dato che non posso cambiare il formato del file XML che sto ricevendo, è c'è un modo per dire a XmlSerialiser di aspettarsi una matrice che non è racchiusa in un altro tag?

risposta

8

Provare a sostituire i vostri [XmlArray("bbs")] e [XmlArrayItem("bb")] attributi con una sola [XmlElement] attribuire

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

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

Mettendo il Array e ArrayItem attributi, si erano esplicitamente che descrive come serializzare questo come un array con un contenitore da imballaggio.

+0

Perfetto, grazie – Dan

4

Cambia la tua [XmlArray]/[XmlArrayItem] a [XmlElement], che racconta la serializzatore gli elementi non hanno involucro, per esempio

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

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