- Home /
Serializing/deserializing List of custom class.
Hi, I have problems with deserializing List of custom class. So, lets start from my actual code. I have a simple class called Key, here it is:
public class Key
{
public Key(string keyName, KeyCode keyCode)
{
this.keyName = keyName;
this.keyCode = keyCode;
}
public string keyName;
public KeyCode keyCode;
}
And i have script with a List that is a singleton:
public class eInput : MonoBechaviour
{
private static eInput instance;
public List<Key> Keys;
public static eInput Instance
{
get
{
if (instance == null) //if instance variable is not assigned
{
eInput[] eInputs = GameObject.FindObjectsOfType<eInput>(); //Search for all GOs of eInput type
if (eInputs != null) //If search will return something...
{
if (eInputs.Length > 1) //...and it's more that one object
{
instance = eInputs[0]; //Assign first object to instance
for (int i = 0; i < eInputs.Length; i++) //Destroy the rest
{
Destroy(eInputs[i].gameObject);
}
}
else if (eInputs.Length == 1)//...and it's only one object
{
instance = eInputs[0]; //Assign it to instance
}
else if (eInputs.Length == 0) //...and it isn't any object
{
//Create new one and assign it to instance
instance = new GameObject("eInput Manager", typeof(eInput)).GetComponent<eInput>();
DontDestroyOnLoad(instance);
}
}
else //otherwise, create new object
{
instance = new GameObject("eInput Manager", typeof(eInput)).GetComponent<eInput>();
DontDestroyOnLoad(instance);
}
}
return instance;
}
}
}
And here are my methods for serializing/deserializing List, it saves them in simple format: "keyName keyCode" eg: "Jump Space".
public void Save()
{
using(StreamWriter sw = File.CreateText(Application.streamingAssetsPath + Path.DirectorySeparatorChar + "Keys.txt"))
{
foreach(Key k in Keys)
{
sw.WriteLine(string.Format("{0} {1}", k.KeyName, k.keyCode));
}
}
}
public void Load()
{
string[] lines = File.ReadAllLines(Application.streamingAssetsPath + Path.DirectorySeparatorChar + "Keys.txt");
foreach(string line in lines)
{
string[] values = line.Split(' ');
eInput.Instance.Keys.Add(new Key((KeyCode)Enum.Parse(typeof(KeyCode), values[1]), values[0]));
}
}
The problem is when I try to deserialize List I get a list with proper lenght (if I serialize 10 Keys i get 10 Keys) but they fields keyName is always "" and keyCode is always KeyCode.None. Anybody could help me with this? I need to note that I tried XmlSerializer too but with same results.
Thanks in advance,
Paul
Your answer
![](https://koobas.hobune.stream/wayback/20220613151232im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Binary file Deserialize to list? 0 Answers
Unity still references file moved to different folder 1 Answer
A node in a childnode? 1 Answer