- Home /
This question was
closed May 31, 2016 at 08:16 AM by
komilll for the following reason:
The question is answered, right answer was accepted
Question by
komilll · May 28, 2016 at 05:14 AM ·
serializationxmlsave datasaveloadxmlserializer
Deserializing data with XML Serializer
Hello, I've a problem with data deserialization. My script is saving data correctly to an XML file but I cannot load anything from it, since XmlSerializer is returning bug, which says:
InvalidCastException: Value is not a convertible object:
Here is my script:
public void Save() //Saving data to XML file
{
var serializer = new XmlSerializer(typeof(GroundContainer));
using (FileStream stream = File.Create(Application.persistentDataPath + "/groundSaveData.xml"))
{
GroundContainer data = new GroundContainer();
data.AddingGrounds();
serializer.Serialize(stream, data);
}
}
public void Load() //Loading data from XML file
{
if (File.Exists(Application.persistentDataPath + "/groundSaveData.xml"))
{
var serializer = new XmlSerializer(typeof(GroundContainer));
FileStream stream = File.Open(Application.persistentDataPath + "/groundSaveData.xml", FileMode.Open);
//Problems occurs in this place
var container = (GroundContainer)serializer.Deserialize(stream) as GroundContainer;
stream.Close();
}
}
}
[Serializable]
public class Ground
{
[XmlAttribute("groundName")]
public string name;
[XmlAttribute("position")]
public Vector3 position;
[XmlAttribute("sprite")]
public Sprite sprite;
}
[XmlInclude(typeof(Vector3))]
[XmlInclude(typeof(Ground))]
[Serializable]
[XmlRoot("GroundCollection")]
public class GroundContainer
{
[XmlArray("Grounds")]
[XmlArrayItem("Tile")]
public List<Ground> grounds = new List<Ground>();
public void AddingGrounds()
{
GameObject[] groundTiles = GameObject.FindGameObjectsWithTag("Ground");
for (int i = 0; i < groundTiles.Length; i++)
{
Ground toAdd = new Ground();
toAdd.name = groundTiles[i].name;
toAdd.position = groundTiles[i].transform.position;
toAdd.sprite = groundTiles[i].GetComponent<SpriteRenderer>().sprite;
grounds.Add(toAdd);
}
}
}
Add here is fragment of the data from XML file:
<?xml version="1.0" encoding="windows-1250"?>
<GroundCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Grounds>
<Tile groundName="Ground" position="(0.0, -1.0, 0.0)" sprite="ColorSheet_34 (UnityEngine.Sprite)" />
<Tile groundName="Ground(Clone)" position="(9.0, -1.0, 0.0)" sprite="ColorSheet_34 (UnityEngine.Sprite)" />
<Tile groundName="Ground(Clone)" position="(10.0, -1.0, 0.0)" sprite="ColorSheet_34 (UnityEngine.Sprite)" />
<Tile groundName="Ground(Clone)" position="(11.0, -1.0, 0.0)" sprite="ColorSheet_34 (UnityEngine.Sprite)" />
<Tile groundName="Ground(Clone)" position="(12.0, -1.0, 0.0)" sprite="ColorSheet_34 (UnityEngine.Sprite)" />
</Grounds>
</GroundCollection>
Comment
Follow this Question
Related Questions
Xml Serialization of "sub classes" 0 Answers
saving array to bin file 0 Answers
Problems with the XML Serializer 1 Answer
"Root Element Missing: XML Exception" when trying to load data from XML file 2 Answers