如何迭代动态对象
How to iterate over dynamic objects
我正在使用 newtonsoft json
要读取带有测试的文件,我将其放入动态对象中。
这对静态配置部分很有效
然而,测试部分由测试组成,其语法不那么静态。
有些项目可能不同。
所以我的 json 文件 test.json 看起来很像:(缩短)
{"config":{"user":"Nico",userID:"54"},
"tests":[ {"ask":"test1","handshake":false},
{"ask":"test2","handshake":false},
{"ask":"test3","handshake":true,"verify":"true"}
{"ask":"test4","handshake":false},
{"send":"result4"}
{"ask":"test7","repeat":30,"delay":120,"brakefail":false} ]
}
我将其转换为动态对象,读取配置部分效果很好:
dynamic testfile = JObject.Parse(File.ReadAllText( "c:\test.json"));
Console.WriteLine (testfile.config.user);
Console.Writeline (testfile.config.userID); //this works
但现在我想知道迭代测试的语法是什么?
由于它们在选项、如何解析它们方面可能略有不同。
(测试经常变高)。
tests 是一个 JArray。您可以使用简单的 foreach
迭代测试
foreach(JObject test in testfile.tests)
{
if(test.ContainsKey("ask"))
Console.WriteLine(test.GetValue("ask"));
}
但你需要验证是否存在像“ask”这样的变量
JObject.Parse()
returns 一个 JObject 类型,可以使用任何有效的字符串键进行索引,例如 'tests' 在您的情况下。然后就可以使用返回值,类型为JToken,来枚举items。
这是一个例子:
var jObject = JObject.Parse("{\"tests\":[{\"name\":\"Hana\"},{\"name\":\"Nita\"}]}");
foreach (var item in jObject["tests"])
Console.WriteLine(item["name"]);
我正在使用 newtonsoft json 要读取带有测试的文件,我将其放入动态对象中。 这对静态配置部分很有效 然而,测试部分由测试组成,其语法不那么静态。 有些项目可能不同。
所以我的 json 文件 test.json 看起来很像:(缩短)
{"config":{"user":"Nico",userID:"54"},
"tests":[ {"ask":"test1","handshake":false},
{"ask":"test2","handshake":false},
{"ask":"test3","handshake":true,"verify":"true"}
{"ask":"test4","handshake":false},
{"send":"result4"}
{"ask":"test7","repeat":30,"delay":120,"brakefail":false} ]
}
我将其转换为动态对象,读取配置部分效果很好:
dynamic testfile = JObject.Parse(File.ReadAllText( "c:\test.json"));
Console.WriteLine (testfile.config.user);
Console.Writeline (testfile.config.userID); //this works
但现在我想知道迭代测试的语法是什么?
由于它们在选项、如何解析它们方面可能略有不同。
(测试经常变高)。
tests 是一个 JArray。您可以使用简单的 foreach
迭代测试foreach(JObject test in testfile.tests)
{
if(test.ContainsKey("ask"))
Console.WriteLine(test.GetValue("ask"));
}
但你需要验证是否存在像“ask”这样的变量
JObject.Parse()
returns 一个 JObject 类型,可以使用任何有效的字符串键进行索引,例如 'tests' 在您的情况下。然后就可以使用返回值,类型为JToken,来枚举items。
这是一个例子:
var jObject = JObject.Parse("{\"tests\":[{\"name\":\"Hana\"},{\"name\":\"Nita\"}]}");
foreach (var item in jObject["tests"])
Console.WriteLine(item["name"]);