diff --git a/ScriptCore/Serialization/DeserializationObject.cs b/ScriptCore/Serialization/DeserializationObject.cs index e32ea08..2b710f6 100644 --- a/ScriptCore/Serialization/DeserializationObject.cs +++ b/ScriptCore/Serialization/DeserializationObject.cs @@ -324,7 +324,9 @@ public class DeserializationObject return deserializedValue; } - if (fieldType.IsPrimitive) + // Decimals are not actually primitives, but we treat them as if they were, because they are a built-in type + // and it makes more sense to send them over to the engine as a binary type than to serialize their underlying fields (which would happen when we treated them as a struct). + if (fieldType.IsPrimitive || fieldType == typeof(decimal)) { return DeserializePrimitive(fieldName, fieldType); } @@ -364,7 +366,7 @@ public class DeserializationObject public object? DeserializePrimitive(string fieldName, Type fieldType) { - Debug.Assert(fieldType.IsPrimitive, $"{fieldType} is not a primitive type."); + Debug.Assert(fieldType.IsPrimitive || fieldType == typeof(decimal), $"{fieldType} is not a primitive type."); SerializationType expectedType = SerializationType.None; diff --git a/ScriptCore/Serialization/SerializedObject.cs b/ScriptCore/Serialization/SerializedObject.cs index d98de3c..0bc7b71 100644 --- a/ScriptCore/Serialization/SerializedObject.cs +++ b/ScriptCore/Serialization/SerializedObject.cs @@ -176,6 +176,8 @@ public class SerializedObject public void SerializeField(string fieldName, object? fieldValue, Type fieldType) { + // Decimals are not actually primitives, but we treat them as if they were, because they are a built-in type + // and it makes more sense to send them over to the engine as a binary type than to serialize their underlying fields (which would happen when we treated them as a struct). if (fieldType.IsPrimitive || fieldType == typeof(decimal)) { // Primitives can't be null