我有一个Json类型:
{
"JobProcessors": [
{
"JobName": "ArchivalJob",
"IsEnabled": true,
"Batching": {
"BatchSize": 0,
"DegreeOfParallelism": -1
},
"Settings": {
"ArchivalJobCollectionPageSize": 50
}
},
{
"JobName": "AuditLogJob",
"IsEnabled": false,
"Batching": {
"BatchSize": 10,
"DegreeOfParallelism": -1
},
"Settings": {}
}
],
"ScheduledJobs": [
{
"JobName": "RemoteStartClientCommandJob",
"PrimaryAction": {
"ConnectionString": "#JobProcessorsIntegrationSBConnectionStringValue#",
"Settings": {
"LeadTimeInSeconds": "600",
"MaxSrsJobCount": 25
}
},
"ErrorAction": {
"ConnectionString": "#PairedJobProcessorIntegrationSBConnectionStringValue#",
"EntityPath": "remotestartqueue",
"Settings": {
"LeadTimeInSeconds": "600",
"MaxSrsJobCount": 25
}
}
}
]
}
我要检查“的IsEnabled ”属性所有“作业名”对属于根据“ JobProcessors ”的范畴。在C#中,我到目前为止使用的是:
dynamic parsedJson = JsonConvert.DeserializeObject(reader.GetString(1));
foreach (var item in parsedJson)
{
foreach (var smallitem in item)
{
foreach (var tag in smallitem)
{
if(tag.IsEnabled.toString()=="true"){
Console.WriteLine("true");
}
}
}
}
这给了我正确的结果,除了它还会迭代“ ScheduledJobs ”。但是主要问题是:
这是正确或最有效的方法吗?如果可能的话,建议一些更好的方法。
我知道的一种使用类,但是我可能事先不知道json结构。而且json非常庞大,因此制作课程可能很麻烦!
鉴于您已经在JObject.Parse(jsonstring);
解析JSON字符串,可以将其SelectTokens()
与JSONPath查询一起使用,以在“ JobProcessors”下找到所有“ JobName”对象:
// I want to check the "IsEnabled" property for all "JobName" for which come under "JobProcessors"
foreach (var job in root.SelectTokens("..JobProcessors[?(@.JobName)]"))
{
var isEnabled = (bool?)job["IsEnabled"];
Debug.WriteLine(string.Format("Job {0}: IsEnabled={1}", job["JobName"], isEnabled));
}
笔记:
..
是递归下降运算符:它递归地JToken
返回返回每个项目的层次结构,随后将其与查询字符串的其余部分进行匹配。
JobProcessors
返回该名称的属性值。
[?(@.JobName)]
返回JobProcessors
具有JobName
属性的对象的数组项(在这种情况下为)。
(bool?)
将“ IsEnabled”的值强制转换为布尔值,如果缺少则为null。
的输出是:
Job ArchivalJob: IsEnabled=True Job AuditLogJob: IsEnabled=False
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句