2011-01-29 12 views
8

Otra pregunta más sobre la serialización de XML con .Net.Deserializar matriz XML en el documento raíz

Estoy recibiendo una cadena XML de un tercero y quiero analizarla en una clase .Net con un mínimo de alboroto. No quiero usar xsd ya que mi XML es bastante simple y no me gustan las clases detalladas que escupe. Tengo los principios básicos de la deserialización funcionando, pero estoy luchando con una matriz de nivel de raíz.

El XML es un problema de la siguiente manera:

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

¿Cómo puedo asignar los atributos de mi C# La gente de clase a deserialise ella?

Esto es lo que me gustaría trabajar, pero no es así.

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

Si el mangle XML para:

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

entonces funciona con la definición de clase a continuación, pero se siente muy mal.

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

no necesita '[Serializable]', btw - no es utilizado por 'XmlSerializer' –

Respuesta

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

aunque en realidad yo prefiero:

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

ya que esto tiene:

  • diferido creación de la lista, ya que cuando no es necesario ningún pueblo
  • no " set "en la propiedad de la lista (no es necesario)
Cuestiones relacionadas