【发布时间】:2021-08-28 06:05:40
【问题描述】:
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?
【问题讨论】:
-
JsonConvert.DeserializeObject<object>("")例如。 -
@GuruStron 谢谢,我不知道。似乎将空格反序列化为任何引用类型都会导致它返回 null。不过,如果这些事情可以更清楚地记录在案,那就太好了。
-
不能只看库的代码吗?它是开源的
-
我跳过了一些源代码,看起来抽象的
JsonConverter类定义了方法ReadJson有一个返回类型opobject?,它基本上是从那里开始的。不是一个真正的情况,但看起来很有趣。 -
.DeserializeObject<..>("")或.DeserializeObject<..>("null").
标签: c# .net json.net json-deserialization