- Home /
Initialize List in User Data Class without deleting binary file
Hi, in my game I save the Data in a binary file using a UserData Class. For the next update I want to add a List of Integers (unlocked Levels), but it doesn't work (nullreferenceexcepetion). I already know the cause: the file already exists but is empty because the List didn't get initialized. This is the UserData. class before the update (excerpt):
[Serializable]
public class UserData
{
public int score;
public UserData()
{
score = 50;
}
}
And now I added the new List:
[Serializable]
public class UserData
{
public int score;
public List<int> unlockedLevels;
public UserData()
{
score = 50;
unlockedLevels = new List<int>();
unlockedLevels.Add(1); //unlocked by default
}
}
For saving and loading Data I use my Data Manager Class:
public static class DataManager
{
public static List<int> GetUnlockedLevels()
{
UserData userData = Load();
return userData.unlockedLevels;
}
private static void Save(UserData data)
{
string path = GetDataFilePath();
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (FileStream fileStream = File.Open(path, FileMode.OpenOrCreate))
{
binaryFormatter.Serialize(fileStream, data);
}
}
private static UserData Load()
{
string path = GetDataFilePath();
if (!File.Exists(path))
{
UserData userData = new UserData();
Save(userData);
}
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (FileStream fileStream = File.Open(path, FileMode.Open))
{
return (UserData)binaryFormatter.Deserialize(fileStream);
}
}
In the Unity Editor I could solve issue this by deleting the file and start the game again. However to solve it on the device I think I have to uninstall the app and reinstall it. But this is no solution for me as there are already people owning the app. How can I solve this through code? How can I get the list initialized without deleting the file?