From c2f36c33b0f3abdc5aed2c9da92f72d6c7b75bbc Mon Sep 17 00:00:00 2001 From: neuecc Date: Wed, 16 Nov 2022 00:16:45 +0900 Subject: [PATCH] fix nongenerics bug --- src/MemoryPack.Core/IMemoryPackFormatter.cs | 8 ++++++-- .../Runtime/MemoryPack.Core/IMemoryPackFormatter.cs | 8 ++++++-- tests/MemoryPack.Tests/PrimitiveTest.cs | 11 +++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/MemoryPack.Core/IMemoryPackFormatter.cs b/src/MemoryPack.Core/IMemoryPackFormatter.cs index be6e58e3..0ce82e91 100644 --- a/src/MemoryPack.Core/IMemoryPackFormatter.cs +++ b/src/MemoryPack.Core/IMemoryPackFormatter.cs @@ -47,14 +47,18 @@ public abstract void Serialize(ref MemoryPackWriter(ref MemoryPackWriter writer, scoped ref object? value) { - var v = (T?)value; + var v = (value == null) + ? default(T?) + : (T?)value; Serialize(ref writer, ref v); } [Preserve] void IMemoryPackFormatter.Deserialize(ref MemoryPackReader reader, scoped ref object? value) { - var v = (T?)value; + var v = (value == null) + ? default(T?) + : (T?)value; Deserialize(ref reader, ref v); value = v; } diff --git a/src/MemoryPack.Unity/Assets/Plugins/MemoryPack/Runtime/MemoryPack.Core/IMemoryPackFormatter.cs b/src/MemoryPack.Unity/Assets/Plugins/MemoryPack/Runtime/MemoryPack.Core/IMemoryPackFormatter.cs index 355990e5..b3cebea3 100644 --- a/src/MemoryPack.Unity/Assets/Plugins/MemoryPack/Runtime/MemoryPack.Core/IMemoryPackFormatter.cs +++ b/src/MemoryPack.Unity/Assets/Plugins/MemoryPack/Runtime/MemoryPack.Core/IMemoryPackFormatter.cs @@ -56,14 +56,18 @@ public abstract void Serialize(ref MemoryPackWriter writer, ref T? value) [Preserve] void IMemoryPackFormatter.Serialize(ref MemoryPackWriter writer, ref object? value) { - var v = (T?)value; + var v = (value == null) + ? default(T?) + : (T?)value; Serialize(ref writer, ref v); } [Preserve] void IMemoryPackFormatter.Deserialize(ref MemoryPackReader reader, ref object? value) { - var v = (T?)value; + var v = (value == null) + ? default(T?) + : (T?)value; Deserialize(ref reader, ref v); value = v; } diff --git a/tests/MemoryPack.Tests/PrimitiveTest.cs b/tests/MemoryPack.Tests/PrimitiveTest.cs index 44c18cd4..265ea2b2 100644 --- a/tests/MemoryPack.Tests/PrimitiveTest.cs +++ b/tests/MemoryPack.Tests/PrimitiveTest.cs @@ -21,4 +21,15 @@ public void ArrayWriterInt() var i = MemoryPackSerializer.Deserialize(buffer.WrittenSpan); i.Should().Be(123); } + + [Fact] + public void NonGenericInt() + { + var bin = MemoryPackSerializer.Serialize(123); + var i = MemoryPackSerializer.Deserialize(bin); + i.Should().Be(123); + + var j = (int)MemoryPackSerializer.Deserialize(typeof(int), bin)!; + j.Should().Be(123); + } }