I have a nullable int that I'm trying to save/load. Full stack trace on Load:
Code: Select all
FormatException: Expected '{' or "null", found '6'.
ES3Internal.ES3JSONReader.ReadNullOrCharIgnoreWhitespace (System.Char expectedChar) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:390)
ES3Internal.ES3JSONReader.StartReadObject () (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:108)
ES3Reader.ReadObject[T] (ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:212)
ES3Reader.Read[T] (ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:245)
ES3Reader.Read[T] () (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:98)
ES3Types.ES3Type_WorldManager.ReadComponent[T] (ES3Reader reader, System.Object obj) (at Assets/Easy Save 3/Types/ES3Type_WorldManager.cs:37)
ES3Types.ES3ComponentType.ReadObject[T] (ES3Reader reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:92)
ES3Types.ES3ObjectType.Read[T] (ES3Reader reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:40)
ES3Reader.ReadObject[T] (ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:215)
ES3Reader.Read[T] (ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:245)
ES3Reader.Read[T] (System.String key) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:162)
ES3.Load[T] (System.String key, ES3Settings settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:266)
ES3.Load[T] (System.String key, System.String filePath) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:245)
WorldManager.CreateOrLoad (System.String saveName) (at Assets/Scripts/World/WorldManager.cs:168)
SaveAndLoadManager.SetupScene () (at Assets/Scripts/Game/SaveAndLoadManager.cs:64)
SaveAndLoadManager.OnSceneFinishedLoading (UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode) (at Assets/Scripts/Game/SaveAndLoadManager.cs:80)
UnityEngine.SceneManagement.SceneManager.Internal_SceneLoaded (UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode) (at C:/buildslave/unity/build/artifacts/generated/bindings_old/common/Core/SceneManagerBindings.gen.cs:245)
Code: Select all
using System;
using UnityEngine;
namespace ES3Types
{
[ES3PropertiesAttribute("saveName", "Seed", "currentTreeWinterState")]
public class ES3Type_WorldManager : ES3ComponentType
{
public static ES3Type Instance = null;
public ES3Type_WorldManager() : base(typeof(WorldManager))
{
Instance = this;
}
protected override void WriteComponent(object obj, ES3Writer writer)
{
var instance = (WorldManager)obj;
writer.WritePrivateField("saveName", instance);
writer.WriteProperty("Seed", instance.Seed);
writer.WritePrivateField("currentTreeWinterState", instance);
}
protected override void ReadComponent<T>(ES3Reader reader, object obj)
{
var instance = (WorldManager)obj;
foreach(string propertyName in reader.Properties)
{
switch(propertyName)
{
case "saveName":
reader.SetPrivateField("saveName", reader.Read<System.String>(), instance);
break;
case "Seed":
instance.Seed = reader.Read<System.Nullable<System.Int32>>();
break;
case "currentTreeWinterState":
reader.SetPrivateField("currentTreeWinterState", reader.Read<WorldManager.TreeWinterStates>(), instance);
break;
default:
reader.Skip();
break;
}
}
}
}
public class ES3Type_WorldManagerArray : ES3ArrayType
{
public static ES3Type Instance;
public ES3Type_WorldManagerArray() : base(typeof(WorldManager[]), ES3Type_WorldManager.Instance)
{
Instance = this;
}
}
}
Edit: Here's the part of the save file for WorldManager, "Seed" is the nullable int here:
Edit 2: Oh, is it just that Easy Save 3 doesn't support nullable types? I would have been expecting an ES3 Type Error on Save, in that case."WorldManager":{"__type":"WorldManager,Assembly-CSharp","value":{"_ES3Ref":8971381811690773543,"goID":469276610457707396,"saveName":"RandomZoo\/newsaveformat","Seed":670424350,"currentTreeWinterState":0}}