Compartilhar via


Propriedades anuláveis de JsonDocument se desserializam para JsonValueKind.Null

A partir do .NET 9, desserializar 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, desserializar valores JSON null em JsonDocument retorna resultados null.

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

Novo comportamento

A partir do .NET 9, desserializar valores JSON null em JsonDocument devolve 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 alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração aborda uma inconsistência entre nulos JSON de nível raiz e nulos aninhados em um documento. Ele 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.

Atualizar o código que consome objetos desserializados que contêm JsonDocument tipos a serem esperados JsonValueKind.Null em vez de null.

APIs afetadas