Partilhar via


As propriedades anuláveis de JsonDocument são desserializadas para JsonValueKind.Null

A partir do .NET 9, a desserialização de valores JSON null em JsonDocument resulta em documentos não nulos do tipo 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 });

Versão introduzida

.NET 9

Comportamento anterior

No .NET 8 e versões anteriores, a desserialização de valores JSON null para JsonDocument devolve resultados null.

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

Novo comportamento

A partir do .NET 9, desserializar valores JSON de null em JsonDocument retorna instâncias não nulas de JsonValueKind.Null.

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

Tipo de mudança de rutura

Esta alteração é uma mudança comportamental.

Motivo da mudança

Essa alteração aborda uma inconsistência entre nulos JSON de nível raiz e nulos aninhados em um documento. Também o torna consistente com o comportamento dos métodos JsonDocument.Parse. O comportamento de retornar null foi considerado um bug e atualizado para alinhamento com o resultado esperado.

Atualize o código que consome objetos desserializados contendo tipos JsonDocument para prever JsonValueKind.Null em vez de null.

APIs afetadas