可為 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
。