From be3a02d53f59286f979abe2457cdcd81607a483a Mon Sep 17 00:00:00 2001 From: Meivyn <793322+Meivyn@users.noreply.github.com> Date: Sat, 16 Sep 2023 01:22:25 -0400 Subject: [PATCH] Fix nullable value being serialized as non-nullable --- .../Config/Stores/GeneratedStoreImpl/Serialization.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/IPA.Loader/Config/Stores/GeneratedStoreImpl/Serialization.cs b/IPA.Loader/Config/Stores/GeneratedStoreImpl/Serialization.cs index 358bef88..d25f8c35 100644 --- a/IPA.Loader/Config/Stores/GeneratedStoreImpl/Serialization.cs +++ b/IPA.Loader/Config/Stores/GeneratedStoreImpl/Serialization.cs @@ -52,16 +52,19 @@ namespace IPA.Config.Stores il.MarkLabel(passedNull); } - if (member.IsNullable) + if (member is { IsNullable: true, HasConverter: false }) il.Emit(OpCodes.Call, member.Nullable_Value.GetGetMethod()); var memberConversionType = member.ConversionType; var targetType = GetExpectedValueTypeForType(memberConversionType); if (member.HasConverter) { - using var stlocal = GetLocal.Allocate(memberConversionType); + using var stlocal = GetLocal.Allocate(member.IsNullable ? member.Type : memberConversionType); using var valLocal = GetLocal.Allocate(typeof(Value)); + if (member.IsNullable) + il.Emit(OpCodes.Ldloc_S, valueTypeLocal.Local); + il.Emit(OpCodes.Stloc, stlocal); il.BeginExceptionBlock(); il.Emit(OpCodes.Ldsfld, member.ConverterField);