Deserialize nested xml
I have an xml document for my game which contains a number of decks which are populated with specific cards. My xml file looks like this:
<?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>
I have a class Card.cs which looks like the following:
using System.Xml.Serialization;
public class Card {
[XmlAttribute("Id")]
public int id;
[XmlElement("CardElement1")]
public string cardElement1;
[XmlElement("CardElement2")]
public string cardElement2;
}
And a class Deck.cs :
using System.Xml.Serialization;
public class Card {
[XmlAttribute("DeckId")]
public int deckId;
[XmlArray("Card")]
public Card[] cards;
}
I'm using a class called CardContainer to populate a List decks with this information:
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;
}
}
I can get hold of the Id's of the decks using this snippet of code:
CardContainer cardContainer = CardContainer.Load(path);
foreach(Deck deck in cardContainer.decks){
Debug.Log(deck.deckId);
}
However I have no idea how to populate the Card-array in Deck with the cards belonging to each deck. Is there anyone who know how to do this?
Your answer
![](https://koobas.hobune.stream/wayback/20220612114406im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Deserializing XML not working with WebGL 1 Answer
Cant save file into Android internal memory 1 Answer
Inserting '¡' into an XML file. 1 Answer
Nested class deserialization 2 Answers
copy data folder to another location 0 Answers