什么情况下JsonConvert.DeserializeObject会返回null

问题描述

Newtonsoft.Json(Json.NET)中JsonConvert.DeserializeObject()方法的签名是:

public static object? DeserializeObject(string value)

代码here

方法(及其所有重载)返回一个可为空的对象。我想知道在什么情况下它会返回null?我一直觉得这个方法要么在反序列化失败的情况下抛出 Newtonsoft.Json.JsonException,要么在反序列化成功的情况下抛出一个正确构造的对象。 official documentation 也无助于解释可空性。

一种可能的情况可能是异常由自定义处理程序处理。该方法是否还有其他情况可以返回null?

var obj = JsonConvert.DeserializeObject<MyObject>("invalid json",new JsonSerializerSettings
{
    Error = (sender,args) => args.ErrorContext.Handled = true
});
// obj is null here?

解决方法

@Lasse V. Karlsen in the comments所述,以下代码将返回null

JsonConvert.DeserializeObject<SomeClass>("")
// or
JsonConvert.DeserializeObject<SomeClass>("null")

这同样适用于任何财产的价值

JsonConvert.DeserializeObject<SomeClass>("{someProp : null}")

请注意,实际的 null 字符串将抛出 ArgumentNullException

JsonConvert.DeserializeObject<SomeClass>(null)