2012-04-24 18 views
5

Tengo el siguiente XMLdeserializar xml a clase, problemas con la lista <>

<map version="1.0"> 
    <properties> 
     <property name="color" value="blue" /> 
     <property name="size" value="huge" /> 
     <property name="texture" value="rugged" /> 
    </properties> 
</map> 

Estoy intentando escribir clases que puedo Deserialize esto en, esto es lo que tengo:

[XmlRoot("map")] 
public class MyMap 
{ 
    [XmlAttribute("version")] 
    public decimal Version { get; set; } 
    [XmlElement("properties")] 
    public List<MyProperty> Properties { get; set; } 
} 

public class MyProperty 
{ 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
    [XmlAttribute("value")] 
    public string Value { get; set; } 
} 

El problema es que no puedo leer la lista de propiedades, solo obtengo una entrada y tiene nulo en Nombre y Valor.

¿Hay algún atributo mágico que deba establecer para que funcione?

+0

Si lo anterior es todo el código XML que tiene, entonces es válido, y me sorprende que se des-serializa en absoluto. – Tejs

Respuesta

12

Debe cambiar MyMap como a continuación. XmlArray y XmlArrayItem son los atributos de la magia

[XmlRoot("map")] 
public class MyMap 
{ 
    [XmlAttribute("version")] 
    public decimal Version { get; set; } 
    [XmlArray("properties")] 
    [XmlArrayItem("property")] 
    public List<MyProperty> Properties { get; set; } 
} 
+0

Brilliant, funcionó perfectamente. Si alguien sabe de un buen tutorial sobre estos atributos y cómo funcionan, lo agradecería. Todo lo que encuentro son copias/pastas de muy simples. – Toodleey

+0

Aún muy relevante. Me ha atrapado por unas 2 horas hoy. No pude resolverlo. Muchas gracias –

1

Una forma de encontrar una solución sería rellenar el objeto en el código y luego serializarlo en xml, y ver cómo se ve el esquema. También podría usar xsd.exe para autogenerar sus clases.

2

En lugar de XmlElement tratar:

[XmlArray("Properties")] 

... en la> propiedad lista <.

+0

XML distingue entre mayúsculas y minúsculas, Properties! = Properties – bjoern

Cuestiones relacionadas