如何在运行时从JSON对象获取特定嵌套属性的值? 这是一个说明我想要做的事情的例子(没有错误检查,因为它只是一个简单的例子):
JSON对象:
string jsonobj = "{
"Header":"someHeader",
"FirstNest":{
"Property1":"123",
"property2":"321",
"SecondNest":{
"property3":"456",
"property4":"789"
}
}
在我的代码中,我会有这样的事情:
string read = Console.ReadLine();
用户将输入的内容,例如FirstNest.Property1
,然后我将返回123
。我可以这样做:
JObject msg = JObject.Parse(jsonobj);
string[] tosearch = read.Split('.'); // This would give me FirstNest Property1
string tofind = (string)msg[tosearch[0]][tosearch[1]];
当用户想要访问FirstNest.SecondNest.property3
时会出现问题,因为我的硬编码方法只能使用两个字符串。如何在运行时构建这样的“查询”方法,我可以使用它来搜索任何属性?
一个灵魂就是创造一个功能
GetProperty(JObject msg, string str1, string str2)
{
return (string)msg[str1][str2];
}
然后是另一个,它将输入3个字符串:
GetProperty(JObject msg, string str1, string str2, string str3)
{
return (string)msg[str1][str2][str3];
}
,然后另一个,它将4个字符串作为输入,依此类推......这似乎不是一个有效的解决方案。
答案 0 :(得分:4)
这个怎么样(为简洁而排除异常处理):
public string GetJsonPropertyValue(string json, string query)
{
JToken token = JObject.Parse(json);
foreach(string queryComponent in query.Split('.'))
{
token = token[queryComponent];
}
return token.ToString();
}
鉴于您的示例中的json,搜索此FirstNest.SecondNest.property3
将返回456
。您应该包括任何必要的用户输入验证和异常处理。