JsonConvert.DeserializeObject将null转换为空对象

时间:2019-02-10 11:58:34

标签: c# json.net

对我来说似乎是个虫子。

var obj = JsonConvert.DeserializeObject<dynamic>("{\"arr\": [{\"prop1\": null}]}");
var prop1 = ob.arr[0].prop1; // has {} value
var test = ob.arr[0].prop1?.prop2; //causes error 

'Newtonsoft.Json.Linq.JValue' does not contain a definition for 'prop2'

1 个答案:

答案 0 :(得分:2)

ob.arr[0].prop1不是null(它是一个非null的空JValue),因此null合并运算符不会中断访问链。

相反,ob.arr[0].prop1.Value为null,因此您可以使用:

var test = obj.arr[0].prop1.Value?.prop2;

var test = obj.arr[0].prop1.HasValues
  ? obj.arr[0].prop1.prop2 // this will be null in your case
  : null;