共用方式為


可為 Null 的 JsonDocument 屬性在反序列化時會成為 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 和更舊的版本中,反序列化 null JSON 值為 JsonDocument 會得到 null 的結果。

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

新行為

從 .NET 9 開始,將 null JSON 值反序列化為 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 與巢狀 Null 之間的不一致問題。 它也會使其行為與 JsonDocument.Parse 方法保持一致。 傳回 null 的行為被認為是一個 Bug,並已更新以符合預期的結果。

更新取用還原串行化物件的程式代碼,其中包含 JsonDocument 型別預期 JsonValueKind.Null,而不是 null

受影響的 API