Dictionary data loss on SerializedScriptableObject

Issue #462 open
Ismael Wittwer created an issue
  1. What happened? Dictionary suddenly lost its data within a SerializedScriptableObject container.

    [SerializeField]
    private Dictionary<int, LibraryObject> objects;
    
  2. How can we reproduce it? Not reproducible. Presented exceptions:

UnityException: GetBool is not allowed to be called during serialization, call it from OnEnable instead. Called from ScriptableObject 'GameObjectLibrary'. See "Script Serialization" page in the Unity Manual for further details. SyntaxTree.VisualStudio.Unity.Bridge.Configuration.GlobalConfiguration.get_SendConsoleToVisualStudio () SyntaxTree.VisualStudio.Unity.Bridge.Configuration.ActiveConfiguration.get_SendConsoleToVisualStudio () SyntaxTree.VisualStudio.Unity.Bridge.VisualStudioIntegration.OnLog (System.String message, System.String stacktrace, LogType type) UnityEngine.Application.CallLogCallback (System.String logString, System.String stackTrace, LogType type, Boolean invokedOnMainThread) (at C:/buildslave/unity/build/artifacts/generated/common/runtime/ApplicationBindings.gen.cs:565) UnityEngine.Debug:LogException(Exception) Sirenix.Serialization.CustomLogger:LogException(Exception) (at F:/Sirenix/Sirenix Solution/Sirenix.Serialization.Config/CustomLogger.cs:61) Sirenix.Serialization.DebugContext:LogException(Exception) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Misc/SerializationConfig.cs:237) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Formatters/BaseFormatter.cs:192) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/ComplexTypeSerializer.cs:334) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/Serializer.cs:261) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1501) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List1) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1305) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1059) Sirenix.OdinInspector.SerializedScriptableObject:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize() (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs:34) GetBool is not allowed to be called during serialization, call it from OnEnable instead. Called from ScriptableObject 'GameObjectLibrary'. See "Script Serialization" page in the Unity Manual for further details. UnityEditor.EditorPrefs:GetBool(String, Boolean) SyntaxTree.VisualStudio.Unity.Bridge.Configuration.GlobalConfiguration:get_SendConsoleToVisualStudio() SyntaxTree.VisualStudio.Unity.Bridge.Configuration.ActiveConfiguration:get_SendConsoleToVisualStudio() SyntaxTree.VisualStudio.Unity.Bridge.VisualStudioIntegration:OnLog(String, String, LogType) UnityEngine.Debug:LogException(Exception) Sirenix.Serialization.CustomLogger:LogException(Exception) (at F:/Sirenix/Sirenix Solution/Sirenix.Serialization.Config/CustomLogger.cs:61) Sirenix.Serialization.DebugContext:LogException(Exception) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Misc/SerializationConfig.cs:237) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Formatters/BaseFormatter.cs:192) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/ComplexTypeSerializer.cs:334) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/Serializer.cs:261) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1501) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List1) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1305) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1059) Sirenix.OdinInspector.SerializedScriptableObject:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize() (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs:34) NotSupportedException: This data reader has no stream. Sirenix.Serialization.SerializationNodeDataReader.get_Stream () (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/DataReaderWriters/SerializationNodes/SerializationNodeDataReader.cs:95) Sirenix.Serialization.DictionaryFormatter2[System.Int32,ch.sycoforge.ARTN.Persistency.Items.LibraryObject].DeserializeImplementation (System.Collections.Generic.Dictionary2& value, IDataReader reader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Formatters/DictionaryFormatter.cs:149) Sirenix.Serialization.BaseFormatter1[System.Collections.Generic.Dictionary2[System.Int32,ch.sycoforge.ARTN.Persistency.Items.LibraryObject]].Deserialize (IDataReader reader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Formatters/BaseFormatter.cs:188) UnityEngine.Debug:LogException(Exception) Sirenix.Serialization.CustomLogger:LogException(Exception) (at F:/Sirenix/Sirenix Solution/Sirenix.Serialization.Config/CustomLogger.cs:61) Sirenix.Serialization.DebugContext:LogException(Exception) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Misc/SerializationConfig.cs:237) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Formatters/BaseFormatter.cs:192) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/ComplexTypeSerializer.cs:334) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Core/Serializers/Serializer.cs:261) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1501) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List1) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1305) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext) (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/UnitySerializationUtility.cs:1059) Sirenix.OdinInspector.SerializedScriptableObject:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize() (at F:/Sirenix/OdinSerializer/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs:34)

  1. What version of Unity are you using? 2017.4.10

  2. Do you have Editor Only mode enabled? No.

  3. What operating system are you on? Windows 10

Comments (3)

  1. Tor Esa Vestergaard
    • changed status to open

    Thanks for this report!

    Upon careful inspection of the debug log, it seems that something went wrong when reading the dictionary data, Odin logged an exception, and then the logging system itself broke due to an error in Unity that we've encountered before, with the Visual Studio plugin being broken/buggy in several ways in the way it hooks into Unity's debug logging.

    There's no way to tell from this how the original error occurred, but I will make a note to increase Odin's robustness against this sort of system failure, at least, so that we will get better error reporting for this case in the future.

    I'm afraid there's not much actionable information here on the actual "original/underlying issue" - if you have any other information you can find, or if something that seems related to this happens again, please let us know :)

  2. Tor Esa Vestergaard

    I have made the aforementioned changes related to better error handling and logging, and if this same issue occurs again with the changes I made, you should get some debug logs that we can actually use for something. If you'd like a build with the changes included, you can write me a mail at tor@sirenix.net with your Odin invoice ID, and I'll send you a build.

  3. Log in to comment