在哪些情况下 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
我正在使用 .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