Skip to content

Support nullable structs in JsonSerializer #30843

@layomia

Description

@layomia

Given

public class ClassWithNullablePerson
{
    public Person? Person { get; set; } = new Person();
}

public struct Person
{
    public string FirstName { get; set; }
    public int? Age { get; set; }
    public DateTime? Birthday { get; set; }
}

Serialization

string serialized = JsonSerializer.Serialize(new ClassWithNullablePerson());
Console.WriteLine(serialized)
// {"Person":{"HasValue":true,"Value":{"FirstName":null,"Age":null,"Birthday":null}}} (Actual)
// {"Person":{"FirstName":null,"Age":null,"Birthday":null}} (Expected)

Deserialization (Debug)

var person = JsonSerializer.Deserialize<ClassWithNullablePerson>(@"{""Person"":{""FirstName"":""Layo"",""Age"":22,""Birthday"":""1995-04-16""}}");
Process terminated. Assertion failed.
     at System.Text.Json.JsonSerializer.HandlePropertyName(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& state) in D:\repos\corefx\src\System.Text.Json\src\System\Text\Json
  \Serialization\JsonSerializer.Read.HandlePropertyName.cs:line 23
     at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack) in D:\repos\corefx\src\System.Text.Json\src\System\Text\Json\Seria
  lization\JsonSerializer.Read.cs:line 54
     at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader& reader) in D:\repos\corefx\src\System.Text.Json\src\System\Text\Json\Serializat
  ion\JsonSerializer.Read.Helpers.cs:line 17

In Release, deserialization returns an instance with null members for the nested Person struct.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions