2016-07-20 10 views
0

I xml folgende habenXml deserialize Array zur Liste

<result> 
    <key accessMask="4294967295" type="Account" expires=""> 
     <rowset name="characters" key="characterID" columns="characterID,characterName,corporationID,corporationName,allianceID,allianceName,factionID,factionName"> 
      <row characterID="123" characterName="Sefa 123" corporationID="456" corporationName="Signal Cartel" allianceID="159" allianceName="Scouts" factionID="0" factionName=""/> 
      <row characterID="1234" characterName="Sefa 1234" corporationID="987" corporationName="Havos" allianceID="753" allianceName="Unlimited" factionID="0" factionName=""/> 
     </rowset> 
    </key> 
</result> 

Und ich habe folgende Schema Setup diese Ausgabe für Deserialisieren.

[XmlRoot("result")] 
    public class ApiKeyInfo 
    { 
     [XmlElement("key")] 
     public Key Key { get; set; } 
    } 

    public class Key 
    { 
     [XmlAttribute("accessMask")] 
     public long AccessMask { get; set; } 

     [XmlAttribute("type")] 
     public string Type { get; set; } 

     [XmlElement("rowset")] 
     public List<AccountCharacter> Characters { get; set; } 
    } 

    public class AccountCharacter 
    { 
     [XmlAttribute("characterId")] 
     public long Id { get; set; } 

     [XmlAttribute("characterName")] 
     public string Name { get; set; } 

     [XmlAttribute("corporationID")] 
     public long CorpId { get; set; } 

     [XmlAttribute("corporationName")] 
     public string CorpName { get; set; } 

     [XmlAttribute("allianceID")] 
     public long AllianceId { get; set; } 

     [XmlAttribute("allianceName")] 
     public string AllianceName { get; set; } 

     [XmlAttribute("factionID")] 
     public long FactionId { get; set; } 

     [XmlAttribute("factionName")] 
     public string FactionName { get; set; } 
    } 

Problem ist, ich kann Characterinformationen nicht deserialisieren. Die Zeichenliste enthält immer 0 Elemente.

Antwort

3

Dies:

[XmlElement("rowset")] 
public List<AccountCharacter> Characters { get; set; } 

bedeutet, dass Sie eine Reihe von rowset Elemente haben werden, zum Beispiel:

<rowset characterID="123" characterName="Sefa 123" ... 

dies stattdessen versuchen:

[XmlArray("rowset")] 
[XmlArrayItem("row")] 
public List<AccountCharacter> Characters { get; set; } 

Ein Tipp für diese Art von Deserialisierungsproblemen ist, den Prozess in umgekehrter Reihenfolge zu versuchen: Erstellen Sie ein Objekt und serialisieren Sie es und sehen, wie das XML aussieht. Es gibt Ihnen wahrscheinlich einen Hinweis darauf, wo Ihr Problem liegt.

Siehe this fiddle für eine funktionierende Demo, es druckt beide Zeilen Name Werte auf der Konsole.

+0

Ich markiere dies als Lösung, weil XML-Ausgabe ist gleich wie meine Eingabe, wenn ich meine Klasse dekoriert, wie Sie zeigen. Aber ich bekomme immer noch 0 Objekte in meiner Charakterliste. Ich bin immer noch nicht in der Lage, sie in meine Liste zu deserialisieren. – Sefa

+0

@deusExCore Sie können in [dieser Geige] (https://dotnetfiddle.net/lyC09r) sehen, dass es gut funktioniert. Nicht sicher, was du anders machst! –

+0

Sieht ziemlich ähnlich aus :) Ich benutze Restsharp, um eine Anfrage zu senden und die Antwort für mich zu deserialisieren. Vielleicht ist es ein Problem mit dem Restsharp. Danke für die Antwort und Geige. – Sefa