Бөлісу құралы:


Свойства JsonDocument, допускающие значение null, десериализуются в JsonValueKind.Null

Начиная с .NET 9, десериализация null значений JSON в JsonDocument приводит к ненулевому документу типа JsonValueKind.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 });

Представленная версия

.NET 9

Предыдущее поведение

В .NET 8 и более ранних версиях десериализация значений JSON null в JsonDocument возвращает результаты null.

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

Новое поведение

Начиная с .NET 9, десериализация значений JSON из null в JsonDocument возвращает ненулевые экземпляры JsonValueKind.Null.

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

Тип критического изменения

Это поведенческое изменение.

Причина изменения

Это изменение устраняет несоответствие между значениями JSON корневого уровня и вложенными значениями NULL в документе. Он также обеспечивает согласованность с поведением методов JsonDocument.Parse. Поведение возврата null считалось ошибкой и было обновлено для соответствия ожидаемому результату.

Обновите код, который использует десериализированные объекты, содержащие типы JsonDocument, чтобы ожидать типы JsonValueKind.Null вместо null.

Затронутые API