如何在运行时从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个字符串作为输入,依此类推...这似乎不是一个有效的解决方案。
怎么样(为简洁起见,排除异常处理):
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
。您应该包括任何必要的用户输入验证和异常处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句