对我来说似乎是个虫子。
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'
答案 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;