是否可以安全地浏览JSON?
给出此JSON,
{
"foo": {
"bar": {
"baz": "quz"
}
}
}
我想像下面一行一样安全地浏览它,而不必为它们全部创建类型。
string value1 = jObj.foo?.bar?.baz ?? "default";
// value1 == "quz"
string value2 = jObj.foo?.abc?.def ?? "default";
// value2 == "default"
我也许可以使用此签名来编写扩展方法,但是请告诉我是否有一种更简便的安全导航方法。
string value = jObj.Value(
"foo.bar?.baz?[1].qux",
"default"
);
答案 0 :(得分:1)
对于您提到的确切语法,可以将JObject强制转换为动态。
var jObj = JsonConvert.DeserializeObject<dynamic>(text);
string value1 = jObj.foo?.bar?.baz ?? "default";
此处a LINQPad sample显示您的示例按预期工作。
如果您不想使用dynamic
(我不会怪您),则可以这样使用SelectToken:
var jObj = JsonConvert.DeserializeObject<JObject>(text);
string value1 = (string)jObj.SelectToken("foo.bar.baz") ?? "default";