将两个JTokens合并为一个

Jos*_*ack 6 c# json json.net

如何将这两个JTokens合并为一个JToken.这听起来应该很简单,但无法绕过它.

{
  "data":[
  {
      "ID":"53a1862000404a304942546b35519ba3",
      "name":"Private Approval Process: Draft Document CPL",
      "objCode":"ARVPTH"
  }]
}

{
"data":[
  {
      "ID":"53a1838200401324eb1ec66562e9d77d",
      "name":"Private Approval Process: Draft Document CPL",
      "objCode":"ARVPTH"
  }]
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

这是我到目前为止所尝试的:

我开始将第一个对象分配给变量Jtoken pageOne然后,我尝试将其连接到第二个变量JToken allPages.我有一个循环,带回多个页面,每个页面有三个字段.最终目标是获取每个页面并创建一个Token包含其中所有页面的大J.

这样的事情:

for (int page = 0; page <= recCount; page += 2000)
{
 //Get data
 pageOne = getJsonData();
 allPages.Concat(pageOne);
}
return allPages;
Run Code Online (Sandbox Code Playgroud)

dbc*_*dbc 7

您可以使用JContainer.Merge(Object, JsonMergeSettings)将一个合并JObject到另一个.请注意,可以JsonMergeSettings.MergeArrayHandling控制数组的合并方式.在MergeArrayHandlingEnumeration文档中,可能的合并选项包括:

 Concat  0   Concatenate arrays.
 Union   1   Union arrays, skipping items that already exist.
 Replace 2   Replace all array items.
 Merge   3   Merge array items together, matched by index. 
Run Code Online (Sandbox Code Playgroud)

因此合并使用MergeArrayHandling.Concat如下,其中allPagespageOne都是类型JContainer(或子类,如JObject):

JContainer allPages = null;
var settings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat };
for (int page = 0; page <= recCount; page += 2000)
{
    //Get data
    var pageOne = (JContainer)getJsonData(page);
    if (allPages == null)
        allPages = pageOne;
    else
        allPages.Merge(pageOne, settings);
}
return allPages;
Run Code Online (Sandbox Code Playgroud)

得到:

{
  "data": [
    {
      "ID": "53a1862000404a304942546b35519ba3",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    },
    {
      "ID": "53a1838200401324eb1ec66562e9d77d",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

合并使用时Replace给出:

{
  "data": [
    {
      "ID": "53a1838200401324eb1ec66562e9d77d",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果您的变量属于类型JToken,则需要将它们转换为JContainer.(不是容器的JSON原语不能合并.)

JsonMergeSettings.MergeNullValueHandlingnull根据需要控制是否合并或忽略值.