C# 如何获取Json中给定子体的所有数组值
我的json已经在上面了,现在我在上面的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": [ {
'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));