- Home /
Error when loading saved date : SerializationException: End of Stream encountered before parsing was completed.
Hello, I have made a save/load system, it worked perfectly until now, but now it shows me this error. I haven't touched anything in the code. Could you please help me ?
The error :
SerializationException: End of Stream encountered before parsing was completed. System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run () (at :0) System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Runtime.Serialization.Formatters.Binary.__BinaryParser serParser, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at :0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck, System.Boolean isCrossAppDomain, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at :0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck, System.Runtime.Remoting.Messaging.IMethodCallMessage methodCallMessage) (at :0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler, System.Boolean fCheck) (at :0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) (at :0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) (at :0) SaveSystem.LoadData () (at Assets/Scripts/Save-Load/SaveSystem.cs:29)
My code :
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static class SaveSystem
{
public static void SaveData(DataStorage dataStorage)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Path.Combine(Application.persistentDataPath, "storedData.dat");
using (FileStream stream = File.Create(path))
{
PlayerData data = new PlayerData(dataStorage);
formatter.Serialize(stream, data);
}
}
public static PlayerData LoadData()
{
string path = Path.Combine(Application.persistentDataPath, "storedData.dat");
if (File.Exists(path))
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = File.Open(path,FileMode.Open))
{
PlayerData data = formatter.Deserialize(stream) as PlayerData;
return data;
}
}
else
{
Debug.LogError("Save file not found in " + path);
return null;
}
}
}
Answer by Senkrigar · Dec 22, 2019 at 06:50 AM
Thanks a lot for quick answer ! I just figured it out after reading your message, my error was that I was trying to serialize a Sprite, I just replaced it with an ID system and it works perfectly !!!
Glad to hear that. Please mark this question as solved selecting your answer whenever you can.
Answer by lgarczyn · Dec 21, 2019 at 10:53 PM
It's likely that the saved file was corrupted by your game quitting before it was saved.
SerializationException: End of Stream encountered before parsing was completed.
means that the file was not able to be read to the end.
The only thing you can do is add try/catch block around the decoding block, and display a reasonable part of those errors to the user.