【发布时间】:2017-10-05 02:01:23
【问题描述】:
我需要反序列化下一个 XML,但结果数组只包含第一个元素:
<data>
<cards>
<card id="1">
<title>card1text</title>
<category>card1cat</category>
</card>
<card id="2">
<title>card2text</title>
<category>card2cat</category>
</card>
<card id="3">
<title>card3text</title>
<category>card3cat</category>
</card>
</cards>
</data>
要创建的对象:
[XmlRoot("data")]
public class Data
{
[XmlArray("cards")]
[XmlArrayItem("card", typeof(Card))]
public Card[] cards { get; set; }
}
public class Card
{
[XmlAttribute("id")]
public int id { get; set; }
public string title { get; set; }
public string category { get; set; }
}
反序列化:
public Data data { get; private set; }
private void Awake()
{
var deserializer = new XmlSerializer(typeof(Data));
var stream = new StreamReader(filePath);
data = deserializer.Deserialize(stream) as Data;
stream.Close();
if (data.cards != null)
{
foreach (var card in data.cards)
{
print("card " + card.id + " " + card.title);
}
}
}
反序列化似乎工作正常,但我只得到第一个元素的数组 我尝试使用 [XmlElement] 而不是 XmlArray,但也失败了。 提前谢谢你。
【问题讨论】:
-
您的代码工作正常,只需再次检查 xml 文件
-
让我解释一下 [XElement] 和 [XmlArray] 之间的区别。 [XmlArray] 需要两层标签,如 xml 中的卡片和卡片。所以你只需要一张类卡(或卡不是两者)。当您使用 [XElement] 时,您需要为每个标签设置一个类。所以你需要一个类 Cards 和一个类 Card。
标签: c# xml deserialization