JsonSerializer.Deserialize 的结果可以为空吗?
Can the result of JsonSerializer.Deserialize ever be null?
the docs for the JsonSerializer.Deserialize
method 中显示的 return 类型都将 return 类型显示为可为空。
如果您查看 the deserialisation examples in the MS docs,您会发现它们不一致,因为第一个和第三个将 return 类型指定为可为空...
WeatherForecast? weatherForecast =
JsonSerializer.Deserialize<WeatherForecast>(jsonString);
...而第二个示例错过了 ?
,这意味着它不可为空。
通过实验,似乎只要你提供有效的JSON(否则你会得到一个异常),那么return值总是一个指定类型的非空对象。如果 属性 名称不匹配,那么 returned 对象将具有这些属性的默认值,但您永远不会得到空引用 - 或者至少,我找不到方法。
谁能解释一下?是否存在方法可以 return null
而不会抛出异常的情况?如果不是,为什么将 return 类型指定为可为空?
谢谢
是的,使用 JSON 序列化程序解析 有效 JSON "null"
必须 return null
。
WeatherForecast? weatherForecast =
JsonSerializer.Deserialize<WeatherForecast>("null");
请注意,其他 有效的 JSON 字符串如 "123"
、"\"bob\""
、"[]"
应该会导致异常,因为 [=其中 29=] 代表一个有效的 对象 .
the docs for the JsonSerializer.Deserialize
method 中显示的 return 类型都将 return 类型显示为可为空。
如果您查看 the deserialisation examples in the MS docs,您会发现它们不一致,因为第一个和第三个将 return 类型指定为可为空...
WeatherForecast? weatherForecast =
JsonSerializer.Deserialize<WeatherForecast>(jsonString);
...而第二个示例错过了 ?
,这意味着它不可为空。
通过实验,似乎只要你提供有效的JSON(否则你会得到一个异常),那么return值总是一个指定类型的非空对象。如果 属性 名称不匹配,那么 returned 对象将具有这些属性的默认值,但您永远不会得到空引用 - 或者至少,我找不到方法。
谁能解释一下?是否存在方法可以 return null
而不会抛出异常的情况?如果不是,为什么将 return 类型指定为可为空?
谢谢
是的,使用 JSON 序列化程序解析 有效 JSON "null"
必须 return null
。
WeatherForecast? weatherForecast =
JsonSerializer.Deserialize<WeatherForecast>("null");
请注意,其他 有效的 JSON 字符串如 "123"
、"\"bob\""
、"[]"
应该会导致异常,因为 [=其中 29=] 代表一个有效的 对象 .