Xml将数组反序列化为列表
本文关键字:列表 反序列化 数组 Xml | 更新日期: 2023-09-27 17:57:59
我有以下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>
我有下面的Schema设置来反序列化这个输出。
[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个元素。
这:
[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是什么样子的。它可能会给你一些关于你的问题在哪里的指示
请看这个fiddle的工作演示,它将两个行名值都打印到控制台。