2012-04-24 2 views
5

Ho il seguente codice XMLdeserializzazione XML in classe, problemi 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> 

Sto cercando di scrivere classi che posso deserializzare questo in, questo è quello che ho:

[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; } 
} 

Il problema è che non riesco a leggere l'elenco delle proprietà, ottengo solo una voce e ha null in Nome e Valore.

Ci sono alcuni attributi magici che ho bisogno di impostare per farlo funzionare?

+0

Se quanto sopra è tutto il codice XML che hai, allora è valido, e sono sorpreso che si deserializzazione affatto. – Tejs

risposta

12

È necessario modificare MyMap come di seguito. XmlArray e XmlArrayItem sono attributi della 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, che ha funzionato perfettamente. Se qualcuno conosce un buon tutorial su questi attributi e su come funzionano, lo apprezzerei. Tutto quello che trovo sono copie/paste di molto semplici. – Toodleey

+0

Ancora molto rilevante. Catturato per circa 2 ore oggi. Non riuscivo a capirlo. Grazie mille –

1

Un modo per trovare una soluzione è compilare l'oggetto nel codice e serializzarlo su xml e vedere come si presenta lo schema. Inoltre è possibile utilizzare xsd.exe per generare automaticamente le classi.

2

Invece di XmlElement, provare:

[XmlArray("Properties")] 

... nella Lista <> proprietà.

+0

XML è case sensitive, Properties! = Properties – bjoern