C# 将变量头转换为JSON JArray

C# 将变量头转换为JSON JArray,c#,json,json.net,json-deserialization,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.JsonConver

我有从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。有什么想法吗?

你可以用它来解析:

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[]>())
{
    // ...
}
var json=“{asd:{qwe:[1,2,3,4]}”;
var obj=JObject.Parse(json);
//只需在这里插入变量
var myData=“asd”;
var myResult=“qwe”;
var path=$“{myData}.{myResult}”;
foreach(obj.SelectToken(path.ToObject()中的变量项)
{
// ...
}
您可以使用来解析它:

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[]>())
{
    // ...
}
var json=“{asd:{qwe:[1,2,3,4]}”;
var obj=JObject.Parse(json);
//只需在这里插入变量
var myData=“asd”;
var myResult=“qwe”;
var path=$“{myData}.{myResult}”;
foreach(obj.SelectToken(path.ToObject()中的变量项)
{
// ...
}

我的解决方案是:

// 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)
{ ... }

我的解决方案是:

// 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)
{ ... }

使用
obj.SelectToken(“asd.qwe”)
而不是obj[“asd”][“qwe”]?至少你可以构建到节点的路径。这绝对是个更好的主意。多好的主意啊!它很简单,具有易于配置的值,甚至不会引发错误,它只返回一个易于测试的空值。使用
obj.SelectToken(“asd.qwe”)
而不是obj[“asd”][“qwe”]?至少你可以构建到节点的路径。这绝对是个更好的主意。多好的主意啊!它很简单,具有易于配置的值,甚至不抛出错误,它只返回一个易于测试的空值
foreach(myJSON[myData][myResults]中的var项)
?um
foreach(myJSON[myData][myResults]中的var项)