如何在Newtonsoft JSON.Net中组合来自两个JObject的两个数组?

时间:2012-09-20 16:03:26

标签: c# json.net

我有两个类似的JSON对象,我已经运行JObject.FromObject()

在每个对象中都有一个包含其他对象数组的属性,如下所示:

文档1

{
  "Title": "Alpha",
  "data": [
    {
      "Id": "Fox2",
      "Field": "King6",
      "Value": "Alpha",
      "Description": "Tango"
    }
  ]
}

文档2

{
  "Title": "Bravo",
  "data": [
    {
      "Id": "Kilo",
      "Field": "Echo",
      "Value": "Romeo",
      "Description": "Jester"
    }
  ]
}

我有两个这样的对象,我试图将数据字段从一个添加到另一个 - 基本上将数据从一个“data”属性的数组添加到另一个。

最终结果应该是这样的:

{
  "Title": "Alpha",
  "data": [
    {
      "Id": "Fox2",
      "Field": "King6",
      "Value": "Alpha",
      "Description": "Tango"
    },
    {
      "Id": "Kilo",
      "Field": "Echo",
      "Value": "Romeo",
      "Description": "Jester"
    }
  ]
}

我试图在没有反序列化和使用组合字符串等的情况下执行此操作。

我尝试过各种变体:

var data = JObject.FromObject(doc1);
var editData = JObject.FromObject(doc2);


foreach (var editItem in editData.Property("data").Children())                                
   {
      data.Property("data").Add(editItem.Children());
   }

但是,我一直收到这样的错误:

  

Newtonsoft.Json.Linq.JProperty不能有多个值

我应该如何尝试组合数组?

1 个答案:

答案 0 :(得分:2)

为什么不在最终对象中包含"Title": "Bravo",

我会这样做:

var j1 = (JObject)JsonConvert.DeserializeObject(json1);
var j2 = (JObject)JsonConvert.DeserializeObject(json2);

var jArray = new JArray(j1, j2);
var str = jArray.ToString();

修改

var final = JsonConvert.SerializeObject( 
                new {Title=j1["Title"], data=j1["data"].Union(j2["data"])},
                Newtonsoft.Json.Formatting.Indented);