在哪些情况下 JsonConvert.DeserializeObject<T> 实际上 returns 为空?

In which cases JsonConvert.DeserializeObject<T> actually returns null?

我正在使用 .NET core 3.1、C#8 和启用的可空引用类型。

从我正在编写的 class 库中,我引用了 NewtonsoftJson package.

的版本 12.0.3

我注意到通过调用 JsonConvert.DeserializeObject<T> 我可以获得一个空引用(Visual Studio 分析器检测到一个可能的空引用解引用)。

请注意,我正在调用带有字符串和 JsonSerializerSettings 实例的重载。我只使用 JsonSerializerSettings 来处理可能的反序列化错误(通过 Error property)。

github 源代码确认我正在调用的重载可能 return 一个空引用,通过 MaybeNull 属性:看看 here确认。

我的问题是:在将 JSON 字符串反序列化为 .NET 类型时,在哪些情况下 newtonsoft JSON return 是 null 引用?

通常它 return 是给定类型的对象,或者其属性为其类型的默认值,我从未遇到过 null 是 return 的情况改为编辑。

由于 JSON 文字 null ,您可以按如下方式重现:

var o = JsonConvert.DeserializeObject<object>("null");
Console.WriteLine(o == null); // True