Newtonsoft.Json(Json.NET(中方法JsonConvert.DeserializeObject()
的签名为:
public static object? DeserializeObject(string value)
此处为源代码。
该方法(及其所有重载(返回一个可为null的对象。我想知道在什么情况下它会返回null?我一直认为,在反序列化失败的情况下,此方法要么抛出Newtonsoft.Json.JsonException
,要么在反序列化成功的情况下抛出构造正确的对象。官方文档也无助于解释可空性。
一种可能的情况是由自定义处理程序处理异常。还有其他情况可以使该方法返回null吗?
var obj = JsonConvert.DeserializeObject<MyObject>("invalid json", new JsonSerializerSettings
{
Error = (sender, args) => args.ErrorContext.Handled = true
});
// obj is null here?
正如@Lasse V.Karlsen在评论中所提到的,以下代码将返回null
JsonConvert.DeserializeObject<SomeClass>("")
// or
JsonConvert.DeserializeObject<SomeClass>("null")
这同样适用于任何属性的价值
JsonConvert.DeserializeObject<SomeClass>("{someProp : null}")
请注意,实际的null
字符串将抛出ArgumentNullException
JsonConvert.DeserializeObject<SomeClass>(null)