问题描述
Newtonsoft.Json(Json.NET)中JsonConvert.DeserializeObject()
方法的签名是:
public static object? DeserializeObject(string value)
该方法(及其所有重载)返回一个可为空的对象。我想知道在什么情况下它会返回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)