• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • 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

avatar image
0
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
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

  • Sort: 

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Xml Serialization of "sub classes" 0 Answers

ScriptableObject+XmlSerializer=sad 2 Answers

Save Game format that is change proof and secure 0 Answers

XMLSerializer does not save unless I open Monodevelop? 1 Answer

saving array to bin file 0 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges