Как я могу объединить два объекта JObject?

У меня есть первый json:

{ "data": [{ "id": "id1", "field": "field1" }], "paging": { "prev": "link1", } } 

и второй:

 { "data": [{ "id": "id2", "field": "field2" }], "paging": { "prev": "link2", } } 

и я хочу объединить / объединить два массива данных, например:

 { "data": [{ "id": "id1", "field": "field1" }, { "id": "id2", "field": "field2" }] } 

(Сейчас я не забочусь о paging ).

Как я могу сделать это быстро и легко? Это моя попытка:

 var final = JsonConvert.SerializeObject(new { data = json1["data"].Union(json2["data"]) }, Newtonsoft.Json.Formatting.Indented).ToString(); 

но возникает исключение: 'Newtonsoft.Json.Linq.JArray' does not contains a definition of 'Union'

 JArray dataOfJson1=json1.SelectToken("data"); JArray dataofJson2=json2.SelectToken("data"); foreach(JObject innerData in dataofJson2) { dataOfJson1.Add(innerData); } 

Newtonsoft.Json теперь поддерживает слияние объектов:
http://antix.co.uk/Blog/Merging-objects-using-JSON.NET

 var dataObject1 = JObject.Parse(@"{ ""data"": [{ ""id"": ""id1"", ""field"": ""field1"" }], ""paging"": { ""prev"": ""link1"", } }"); var dataObject2 = JObject.Parse(@"{ ""data"": [{ ""id"": ""id2"", ""field"": ""field2"" }], ""paging"": { ""prev"": ""link2"", } }"); var mergeSettings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }; // method 1 (dataObject1.SelectToken("data") as JArray).Merge(dataObject2.SelectToken("data"), mergeSettings); // method 2 //dataObject1.Merge(dataObject2, mergeSettings); var mergedArray = dataObject1.SelectToken("data") as JArray; Console.WriteLine(mergedArray.ToString(Formatting.None)); 

(проверено с помощью компилятора мозга;))

Возможным решением может быть:

 class Container { public List data{get;set;} } class IdField { public string id{get;set;} public string field{get;set;} } string s1 = "{ \"data\": [{ \"id\": \"id1\", \"field\": \"field1\" }], \"paging\": { \"prev\": \"link1\", } }"; string s2 = "{ \"data\": [{ \"id\": \"id2\", \"field\": \"field2\" }], \"paging\": { \"prev\": \"link2\", } }"; var d1 = JsonConvert.DeserializeObject(s1); var d2 = JsonConvert.DeserializeObject(s2); d1.data.AddRange(d2.data); var result = JsonConvert.SerializeObject(d1); 

Для тех, кто (как я), не может использовать новую библиотеку JSON.net. Следующий метод – это то, что я использую.

 public static JObject mergeJsonObjects(List objects) { JObject json = new JObject(); foreach(JObject JSONObject in objects) { foreach(var property in JSONObject) { string name = property.Key; JToken value = property.Value; json.Add(property.Key, property.Value); } } return json; } 

Метод принимает список JObjects и возвращает один JObject, simpel и эффективный.

  • Объединение двух массивов Json.NET путем конкатенации содержащихся элементов
  • Ошибка при запуске JSON.NET при сериализации Mongo ObjectId
  • Разбор JSON DateTime от JSON Serializer от Newtonsoft
  • JToken: получить исходное / оригинальное значение JSON
  • Как я могу разбирать JSON с C #?
  • Отключить использование JSON.net
  • Как реализовать пользовательский JsonConverter в JSON.NET для десериализации списка объектов базового classа?
  • Разбор массива JSON с использованием Json.Net
  • Сериализация типа Json.Net с полиморфным дочерним объектом
  • Строка Parse Json в C #
  • Конвенция о присвоении имен JSON
  • Interesting Posts

    Уточнение причины смешивания Неявные и явные ожидания документа Selenium

    Как получить текущего пользователя, который обращается к приложению ASP.NET?

    Asp.net выпускает сборку против сборки отладки

    Ноутбук не загружается после необычного статического разряда?

    Ограничение размера загрузки файла Django

    Как работает макрос смещения C?

    Может ли мой раздел восстановления использоваться после обновления?

    Инструмент для выделения и комментирования текста на веб-сайтах?

    Ошибка: не удалось подключиться к идентификатору процесса 0

    Заказ streamов для запуска в том порядке, в котором они были созданы / запущены

    Большинство программ, не видимых в программах и функциях в Windows 7

    Причина передачи указателя по ссылке в C ++?

    Получите гиперссылки PDF на iOS с кварцем

    Сортировка списка Java: есть ли способ сохранить список, который автоматически сортируется автоматически, например TreeMap?

    Перемещение JLabel в другой JLabels – GUI

    Давайте будем гением компьютера.