2
我目前在unity3D中制作游戏。我有一个xml文档,其中包含许多用各种纸牌填充的套牌。该XML文件看起来是这样的:在c#中反序列化嵌套的xml(Unity-script)
<?xml version="1.0" encoding="utf-8" ?>
<CardCollection>
<Cards>
<Deck DeckId="1">
<Card Id="1">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
<Card Id="2">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
<Card Id="3">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
</Deck>
<Deck DeckId="2">
<Card Id="1">
<CardElement1></CardElement1>
<CardElement2></CardElement2>
</Card>
</Deck>
</Cards>
</CardCollection>
我有一个类Card.cs看起来像下面这样:
using System.Xml.Serialization;
public class Card {
[XmlAttribute("Id")]
public int id;
[XmlElement("CardElement1")]
public string cardElement1;
[XmlElement("CardElement2")]
public string cardElement2;
}
和A类Deck.cs:
使用系统。 Xml.Serialization;
public class Deck {
[XmlAttribute("DeckId")]
public int deckId;
[XmlArray("Card")]
public Card[] cards;
}
我使用了一个名为CardContainer类来填充这个信息的列表甲板:
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
using UnityEngine;
[XmlRoot("CardCollection")]
public class CardContainer {
[XmlArray("Cards")]
[XmlArrayItem("Deck")]
public List<Deck> decks = new List<Deck>();
public static CardContainer Load(string path)
{
TextAsset xml = Resources.Load<TextAsset>(path);
XmlSerializer serializer = new XmlSerializer(typeof(CardContainer));
StringReader reader = new StringReader(xml.text);
CardContainer cards = serializer.Deserialize(reader) as CardContainer;
reader.Close();
return cards;
}
}
我可以用这个代码片段甲板的ID用的保持:
CardContainer cardContainer = CardContainer.Load(path);
foreach(Deck deck in cardContainer.decks){
Debug.Log(deck.deckId);
}
但是,我不知道如何反序列化和填充Deck对象中的Card-array。