- Home /
How do i load Xml and assign variables to player in C#?
I have a working C# script for creating a save file, but i cannot figure out how to load its contents and reapply them to my player on Load(). Please don't list old posts. I have tried countless times to use the old posts as reference, but it never works as it should.
Currently, the editor tells me that i cannot convert 'object' to 'PlayerContainer'. PlayerContainer is a Class i created.
Saving to an xml file works, loading it and assigning it's contents to my player does not.
PlayerContainer:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
public class PlayerContainer {
[XmlArray("Players")]
public List<Player> saveData;
}
Player:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
public class Player {
[XmlElement("playerHp")]
public int playerHp;
public int playerMaxHp;
public int playerMp;
public int playerMaxMp;
public int attack;
public int defense;
public int magic;
public int ranged;
public List<Item> items;
public void MakePlayerData(int ph, int pmh, int pm, int pmm, int atk, int def, int mag, int rng, List<Item> it){
playerHp = ph;
playerMaxHp = pmh;
playerMp = pm;
playerMaxMp = pmm;
attack = atk;
defense = def;
magic = mag;
ranged = rng;
items = it;
}
}
MyPlayerScripts current Save() and Load()
void Save(){
playerData.MakePlayerData(playerHp, playerMaxHp, playerMp, playerMaxMp, attack, defense, magic, ranged, inventoryScript.items);
var serializer = new XmlSerializer(typeof(PlayerContainer));
var stream = new FileStream(path, FileMode.Create);
serializer.Serialize(stream, playerContainer);
stream.Close();
}
public void Load(){
var serializer = new XmlSerializer(typeof(PlayerContainer));
var stream = new FileStream(path, FileMode.Open);
playerContainer = serializer.Deserialize(stream);
}
Any ideas what i am doing wrong?
Edit: I forgot to mention I am creating new instances of my PlayerContainer and Player classes. All changes are targeting those instances.
public PlayerContainer playerContainer;
&&
public Player playerData;
Answer by Louis Watson · Sep 21, 2014 at 07:16 AM
your missing a cast in your Load method ie:
playerContainer = serializer.Deserialize(stream) as PlayerContainer;