2016-07-20 150 views
0

我有以下XML的Xml反序列化數組列出

<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> 

,我有以下模式設置爲反序列化這個輸出。

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

問題是,我無法反序列化字符信息。字符列表中始終包含0個元素。

回答

3

此:

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

意味着你有一堆rowset元素,例如:

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

試試這個:

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

一個有用的技巧,這些反序列化問題的種類是嘗試相反的過程:創建一個對象並將其序列化並查看XML的外觀。它可能會給你一些指示你的問題在哪裏。

了工作演示見this fiddle,它打印兩行名稱值到控制檯。

+0

我這個標記作爲解決方案,因爲XML輸出是一樣的我輸入我的時候我的裝飾類爲您展示。但我的角色列表中仍然有0個對象。我仍然無法將它們反序列化到我的列表中。 – Sefa

+0

@deusExCore你可以在[this fiddle](https://dotnetfiddle.net/lyC09r)中看到它可以正常工作。不知道你在做什麼不同! –

+0

看起來非常相似:)我使用Restsharp發送請求並反序列化響應。也許這是Restharp的問題。感謝您的答案和小提琴。 – Sefa