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.
Zalecana akcja
Zaktualizuj kod, który używa zdeserializowanych obiektów zawierających typy JsonDocument
, aby zamiast null
oczekiwać JsonValueKind.Null
.