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.
Ação recomendada
Atualize o código que consome objetos desserializados contendo tipos JsonDocument
para prever JsonValueKind.Null
em vez de null
.