2012-04-24 3 views
5

Ich habe die folgende XML-Deserialisieren xml Klasse, Probleme mit der Liste <>

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

Ich versuche, Klassen zu schreiben, die ich in dieser deserialisieren kann, ist es das, was ich habe:

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

Das Problem ist, dass ich nicht scheinen kann, die Eigenschaftsliste zu lesen, ich bekomme nur einen Eintrag und es hat null in Name und Wert.

Gibt es einige magische Attribute, die ich einstellen muss, damit dies funktioniert?

+0

Attribute Wenn die vor allem die XML, die Sie haben, dann ist es ungültig, und ich bin überrascht, dass es überhaupt ist Deserialisieren. – Tejs

Antwort

12

Sie sollten MyMap wie folgt ändern. XmlArray und XmlArrayItem sind die Magie

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

Brilliant, das hat perfekt funktioniert. Wenn jemand ein gutes Tutorial über diese Attribute und deren Funktionsweise kennt, würde ich es begrüßen. Alles, was ich finde, sind Kopien/Pasten von sehr einfachen. – Toodleey

+0

Immer noch sehr relevant. Fing mich für ungefähr 2 Stunden heute. Konnte es nicht herausfinden. Vielen Dank –

1

Eine Möglichkeit, eine Lösung zu finden, wäre, das Objekt im Code aufzufüllen und es dann in xml zu serialisieren und zu sehen, wie das Schema aussieht. Sie können auch xsd.exe verwenden, um Ihre Klassen automatisch zu generieren.

2

Statt XmlElement, versuchen:

[XmlArray("Properties")] 

... auf der Liste <> Eigenschaft.

+0

XML ist case sensitive, Eigenschaften! = Eigenschaften – bjoern

Verwandte Themen