将变量头转换为JSON JArray

时间:2018-06-22 13:42:23

标签: c# json json.net json-deserialization

我有从JSON获取数据的代码:

dynamic myJSON = Newtonsoft.Json.JsonConvert.DeserializeObject(sourceString);
foreach (var item in myJSON["data"]["results"])
{ ... }

现在,我想将此部分myJSON["data"]["results"]做成通用的,理想情况下是通过传入诸如以下的变量来实现:

dynamic myJSON = Newtonsoft.Json.JsonConvert.DeserializeObject(sourceString);
var variableResults = ((Newtonsoft.Json.Linq.JArray) string.Format("myJSON[\"{0}\"][\"{1}\"]", myData, myResults);
foreach (var item in variableResults)
{ ... }

我尝试了不同的转换,并在此处查看,但是毫无疑问,转换总是来自字符串,而不是JArray。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用JObject进行解析:

var json = "{asd: {qwe: [1,2,3,4]}}";
var obj = JObject.Parse(json);

// just plug in your variables here
var myData = "asd";
var myResult = "qwe";
var path = $"{myData}.{myResult}";
foreach (var item in obj.SelectToken(path).ToObject<int[]>())
{
    // ...
}

答案 1 :(得分:1)

我的解决方案最终是:

// User would use a textbox with space separated values like "data results"
var parameterList = textBox1.Text.Trim().Replace(" ", ".");

var jsonObject = JObject.Parse(sourceString);
var jsonList = jsonObject.SelectToken(parameterList);
if (jsonList == null) { ... }

foreach (var item in jsonList)
{ ... }