JsonSerializer.Deserialize 的结果可以为 null 吗?

Avr*_*oel 16 c# json

该方法的文档JsonSerializer.Deserialize中显示的返回类型均将返回类型显示为可为空。

如果您查看MS 文档中的反序列化示例,您会发现它们不一致,因为第一个和第三个将返回类型指定为可为空...

WeatherForecast? weatherForecast = 
  JsonSerializer.Deserialize<WeatherForecast>(jsonString);
Run Code Online (Sandbox Code Playgroud)

...而第二个示例缺少?,这意味着它不可为空。

通过实验,似乎只要您提供有效的 JSON(否则会出现异常),那么返回值始终是指定类型的非空对象。如果属性名称不匹配,则返回的对象将具有这些属性的默认值,但您永远不会获得空引用 - 或者至少,我找不到方法。

有谁能澄清一下吗?是否存在该方法可以返回null而不抛出异常的情况?如果不是,为什么返回类型指定为可为空?

谢谢

Ale*_*kov 14

Yes, parsing valid JSON "null" with a JSON serializer have to return null.

WeatherForecast? weatherForecast = 
  JsonSerializer.Deserialize<WeatherForecast>("null");
Run Code Online (Sandbox Code Playgroud)

Note that other valid JSON strings like "123", "\"bob\"", "[]" should cause an exception because none of them represent a valid object.

  • 感谢那。对我来说,“null”是有效的 JSON 似乎很奇怪,但是嘿,你每天都会学到新东西 (3认同)