对我来说似乎是一个错误。
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'
ob.arr[0].prop1
不是空的(它是一个非空的空JValue
(,因此空合并运算符不会停止访问链。
相反,ob.arr[0].prop1.Value
为空,因此您可以使用:
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;