2011-01-29 16 views
8

Ancora un'altra domanda sulla serializzazione XML con .Net.Deserializzare array XML nella root del documento

Sto ricevendo una stringa XML da una terza parte e voglio analizzarla in una classe .Net con il minimo sforzo. Non voglio usare xsd dato che il mio XML è piuttosto semplice e non mi piacciono le classi prolisse che sputa. Ho le basi della deserializzazione funzionante ma sto lottando con un array di livello root.

Il problema XML è la seguente:

<people> 
    <person> 
    <id>1234</id> 
    </person> 
    <person> 
    <id>4567</id> 
    </person> 
</people> 

Come posso map gli attributi sulla mia classe C# persone a deserialise esso?

Questo è quello che mi piacerebbe lavorare ma non è così.

[Serializable()] 
[XmlRootAttribute("people", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 

Se manipolare i XML:

<result> 
    <people> 
    <person> 
     <id>1234</id> 
    </person> 
    <person> 
     <id>4567</id> 
    </person> 
    </people> 
</result> 

allora funziona con la definizione della classe di sotto ma si sente molto male.

[Serializable()] 
[XmlRootAttribute("result", Namespace = "", IsNullable = false)] 
public class People 
{ 
    [XmlArray(ElementName = "people")] 
    [XmlArrayItem(typeof(Person), ElementName = "person")] 
    public List<Person> Persons; 
} 
+0

non è necessario '[Serializable]', btw - non è usato da 'XmlSerializer' –

risposta

9
[XmlElement("person")] 
public List<Person> Persons; 

anche se in realtà io preferisco:

private List<Person> persons; 
[XmlElement("person")] 
public List<Person> Persons {get{return persons??(persons=new List<Person>());}} 

come questo ha:

  • creazione lista differita, per quando non hai bisogno di qualsiasi popolo
  • no " impostare "sulla proprietà dell'elenco (non è necessario)
Problemi correlati