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



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)

最新更新