Udostępnij za pośrednictwem


Właściwości JsonDocument o wartości null są deserializowane do JsonValueKind.Null

Począwszy od platformy .NET 9, deserializowanie wartości null JSON w JsonDocument powoduje, że dokumenty typu JsonValueKind.Nullnie mają wartości null.

using System.Text.Json;

var doc = JsonSerializer.Deserialize<JsonDocument>("null");

// Returns true in .NET 8 and false in .NET 9.
Console.WriteLine(doc is null);

// Returns false in .NET 8 and true in .NET 9.
Console.WriteLine(doc is { RootElement.ValueKind: JsonValueKind.Null });

Wprowadzona wersja

.NET 9

Poprzednie zachowanie

W przypadku platformy .NET 8 i starszych wersji deserializowanie wartości JSON null do JsonDocument zwraca wyniki null.

var doc = JsonSerializer.Deserialize<JsonDocument>("null");
Console.WriteLine(doc is null); // True.

Nowe zachowanie

Począwszy od platformy .NET 9, deserializowanie wartości JSON null do JsonDocument zwraca niepuste wystąpienia JsonValueKind.Null.

var doc = JsonSerializer.Deserialize<JsonDocument>("null");
Console.WriteLine(doc is null); // False.
Console.WriteLine(doc is { RootElement.ValueKind: JsonValueKind.Null }); // True.

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Ta zmiana dotyczy niespójności między wartościami null na poziomie głównym JSON a zagnieżdżonymi nullami w dokumencie. Zapewnia również spójność z zachowaniem metod JsonDocument.Parse. Zachowanie zwracania null zostało uznane za usterkę i zostało zaktualizowane, aby lepiej odpowiadało oczekiwanemu wynikowi.

Zaktualizuj kod, który używa zdeserializowanych obiektów zawierających typy JsonDocument, aby zamiast nulloczekiwać JsonValueKind.Null.

Interfejsy API, których dotyczy problem