2016-11-07 5 views
0

Ich versuche, eine Liste der Objekte zu deserialisieren, die Listen von anderem Objekt wiederum enthalten. Was ich habe, ist folgendes. Die eigentliche Deserialisierung wird vom Framework in einer ApiContoller-httpPost-Anforderung durchgeführt. Der Endpunkt sieht wie folgt aus:xml Deserialize eine Liste von Objekten eine Liste von Objekten in C# enthalten

[HttpPost] 
    public async Task<HttpResponseMessage> MethodCall([FromBody] XmlEntries entries) 
    { 
    .... 
    } 

Die XmlEntries Klasse sieht wie folgt aus:

[XmlRoot("Root")] 
public class XmlEntries 
{ 
    [XmlArrayItem("XmlEntry")] 
    public List<XmlEntry> XmlEntries{ get; set; } 

    public XmlEntries() 
    { 
     XmlEntries = new List<XmlEntry>(); 
    } 

    public XmlEntries(IEnumerable<XmlEntry> entries) 
    { 
     XmlEntries= entries.ToList(); 
    } 
} 

Die XmlEntry Klasse sieht wie folgt aus:

public class XmlEntry 
{ 
    [XmlArrayItem("XmlSubEntry")] 
    public List<XmlSubEntry> XmlSubEntries{ get; set; } 
} 

und die XmlSubEntry sieht wie folgt aus.

public class XmlSubEntry 
{ 
    string AttributeOne{ get; set; } 
    int? AttributeTwo{ get; set; } 
} 

Ich habe Fiedler wurde mit der folgenden XML

ist
<?xml version="1.0" encoding="utf-8"?> 
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <XmlEntries> 
    <XmlEntry> 
     <XmlSubEntries> 
     <XmlSubEntry> 
      <AttributeOne>P</AttributeOne> 
      <AttributeTwo>8</AttributeTwo> 
     </XmlSubEntry> 
     <XmlSubEntry> 
      <AttributeOne>S</AttributeOne> 
      <AttributeTwo>26</AttributeTwo> 
     </XmlSubEntry> 
     </XmlSubEntries> 
    </XmlEntry> 
    </XmlEntries> 
</Root> 

Mein Problem zu senden, dass die Attribute von XmlSubEntry nie richtig serialisiert werden. Wenn i den method in apiController Einträge debuggen wird eine Liste sein, die 1 XmlEntry mit XmlSubEntries eine Liste von 2 XmlSubEntry zu sein, aber die Attribute (AttributeOne und AttributeTwo) immer null.

Ich habe versucht, die Klassen zu kommentieren. Auf alle Arten kann ich Sache, aber ich werde immer noch nicht die Attribute erhalten, um correctry zu serialisieren.

Gibt es einen XML-Ninjas um, dass mir helfen, herauszufinden, was mache ich falsch?

Antwort

0

Der beste Tipp, den ich Ihnen geben kann, ist dies in umgekehrter Reihenfolge - fügen Sie einige Daten hinzu und serialisieren Sie es in XML, um zu sehen, wie es aussieht. Das wird normalerweise darauf hinweisen, wo du falsch liegst. In diesem Fall sind Sie jedoch sehr Schließen. Das einzige Problem, das Sie haben, ist, dass Sie private Eigenschaften nicht serialisieren können, also machen Sie sie öffentlich:

public class XmlSubEntry 
{ 
    public string AttributeOne { get; set; } 
    public int? AttributeTwo { get; set; } 
} 
+0

Danke. Ich machte es komplizierter als nötig. Die Lösung war unsichtbar. :) –

Verwandte Themen