解析复杂的JSON:多个循环与类

荒志

我有一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章