C# 如何获取Json中给定子体的所有数组值

C# 如何获取Json中给定子体的所有数组值,c#,arrays,json,json.net,C#,Arrays,Json,Json.net,我的json已经在上面了,现在我在上面的json中有多个'callToActions'array,希望收集所有这些参数并与表进行比较 我正在做的事情如下: { "hasLoadMore": true, "groups": [ { "order": 0, "title": "string", "total": 0, "dateFormat": "string", "messages": [ {

我的json已经在上面了,现在我在上面的json中有多个
'callToActions'
array,希望收集所有这些参数并与表进行比较

我正在做的事情如下:

    {
  "hasLoadMore": true,
  "groups": [
    {
      "order": 0,
      "title": "string",
      "total": 0,
      "dateFormat": "string",
      "messages": [
        {
          "commsId": 0,
          "commsDirectionCode": "string",
          "commsReasonCRSNN": 0,
          "commsDeliveryChannelCDCHN": "string",
          "commsDeliveryStateCode": "string",
          "commsDeliveryDttm": "2017-02-14T02:20:52.836Z",
          "commsSuccessFlag": true,
          "commsCode": "string",
          "commsName": "string",
          "commsRankingNumb": 0,
          "customerGrainCUSGN": 0,
          "productItemCode": "string",
          "sourceApplBAPPN": 0,
          "sourceCommsRefn": "string",
          "parentCommsId": 0,
          "campaignDttm": "2017-02-14T02:20:52.836Z",
          "campaignCode": "string",
          "campaignName": "string",
          "contentValidStartDttm": "2017-02-14T02:20:52.836Z",
          "contentValidEndDttm": "2017-02-14T02:20:52.836Z",
          "trackingCode": "string",
          "headlineDisplayText": "string",
          "contentDisplayText": "string",
          "topic": "string",
          "topicIconClass": "string",
          "contentTemplateId": 0,
          "contentTemplateVersNumb": 0,
          "archiveDate": "2017-02-14T02:20:52.836Z",
          "commsParameters": [
            {
              "commsId": 0,
              "paramSeqNumb": 0,
              "paramText": "string",
              "paramValue": "string"
            }
          ],
          "contentTemplateParameters": [
            {
              "commsId": 0,
              "paramSeqNumb": 0,
              "paramText": "string",
              "paramValue": "string"
            }
          ],
          "callToAction": [
            {
              "displayText": "string",
              "uri": "string"
            }
          ],
          "isFlagged": true,
          "isSeen": true,
          "isRead": true,
          "isActioned": true
        }
      ]
    }
  ]
}
{
字符串内容=Context.Response.content.ReadAsStringAsync().Result;
var resultObjects=AllChildren(JObject.Parse(content))
.First(c=>c.Type==JTokenType.Array&&c.Path.Contains(decentant))
.儿童();
JArray responseList=新的JArray();
foreach(结果对象中的JObject结果)
{
响应列表。添加(结果);
}
可比较对象(响应列表,表格);
}
私有静态IEnumerable AllChildren(JToken Decentant)
{
foreach(decentant.Children()中的变量c)
{
收益率c;
foreach(所有子项中的var cc(c))
{
收益率;
}
}
}

但它只会给我遇到的
“First”
数组,但我想用同一个后代收集所有数组(多个)。这里我想要的后代是
调用操作
,而不是手工编写自己的方法来递归地降低
JToken
层次结构,您可以使用内置方法,也可以为您执行此操作

使用第一种方法,您将执行以下操作:

 {

        string content = Context.Response.Content.ReadAsStringAsync().Result;

        var resultObjects = AllChildren(JObject.Parse(content))
        .First(c => c.Type == JTokenType.Array && c.Path.Contains(decendant))
        .Children<JObject>();
        JArray responseList = new JArray();
        foreach (JObject result in resultObjects)
        {
           responseList.Add(result);

        }
        CompareObjectToTable(responseList, table);

    }

     private static IEnumerable<JToken> AllChildren(JToken decendant)
    {
        foreach (var c in decendant.Children())
        {
            yield return c;
            foreach (var cc in AllChildren(c))
            {
                yield return cc;
            }
        }
    }
要创建展开阵列,请执行以下操作:

var responseList = new JArray(query);

示例。

您可以对其进行解析,然后一扫就可以得到全部内容
var root = JToken.Parse(content);
var descendant = "callToAction";
var query = root
    // Recursively descend the JSON hierarchy using the JSONpath recursive descent operator "..", and select the values of all properties named descendant
    .SelectTokens(string.Format("..{0}", descendant))
    // And filter for those that are arrays.
    .OfType<JArray>();
var responseList = new JArray(query);
var responseList = new JArray(query.SelectMany(a => a));