diff --git a/YamlDotNet.Test/Serialization/SerializationTestHelper.cs b/YamlDotNet.Test/Serialization/SerializationTestHelper.cs index 9f43770e..272245aa 100644 --- a/YamlDotNet.Test/Serialization/SerializationTestHelper.cs +++ b/YamlDotNet.Test/Serialization/SerializationTestHelper.cs @@ -141,6 +141,11 @@ public enum EnumExample Two } + public struct StructExample + { + public int Value { get; set; } + } + public enum SByteEnum : sbyte { Default, Sbyte } public enum ByteEnum : byte { Default, Byte } public enum Int16Enum : short { Default, Short } diff --git a/YamlDotNet.Test/Serialization/SerializationTests.cs b/YamlDotNet.Test/Serialization/SerializationTests.cs index e27c66ba..613a259e 100644 --- a/YamlDotNet.Test/Serialization/SerializationTests.cs +++ b/YamlDotNet.Test/Serialization/SerializationTests.cs @@ -183,6 +183,24 @@ public void RoundtripNullableEnums(EnumExample? value) result.Should().Be(value); } + [Fact] + public void RoundtripNullableStructWithValue() + { + var value = new StructExample { Value = 2 }; + + var result = DoRoundtripFromObjectTo(value); + + result.Should().Be(value); + } + + [Fact] + public void RoundtripNullableStructWithoutValue() + { + var result = DoRoundtripFromObjectTo(null); + + result.Should().Be(null); + } + [Fact] public void SerializeCircularReference() { diff --git a/YamlDotNet/Serialization/NodeDeserializers/ObjectNodeDeserializer.cs b/YamlDotNet/Serialization/NodeDeserializers/ObjectNodeDeserializer.cs index 4c44b9fb..559a29f4 100644 --- a/YamlDotNet/Serialization/NodeDeserializers/ObjectNodeDeserializer.cs +++ b/YamlDotNet/Serialization/NodeDeserializers/ObjectNodeDeserializer.cs @@ -47,11 +47,14 @@ bool INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func(out var _)) { var propertyName = parser.Consume(); - var property = typeDescriptor.GetProperty(expectedType, null, propertyName.Value, ignoreUnmatched); + var property = typeDescriptor.GetProperty(implementationType, null, propertyName.Value, ignoreUnmatched); if (property == null) { parser.SkipThisAndNestedEvents();