using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public static void Test()
TestMergeInMemoryWithGrouping();
public static void TestMergeFromFiles()
var files = new List<string>();
IEnumerable<string> measturementJsonCollection = GetJsonMeasurements();
foreach (var j in measturementJsonCollection)
files.Add(count++.ToString() + ".json");
File.WriteAllText(files[files.Count - 1], j);
TestMergeFromFiles(files);
public static void TestMergeFromFiles(IEnumerable<string> fileNames)
var settings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat };
var json = fileNames.Aggregate(new JObject(),
using (var file = File.OpenText(s))
using (var reader = new JsonTextReader(file))
j.Merge(JToken.Load(reader), settings);
Assert.IsTrue(JToken.DeepEquals(json, JToken.Parse(GetExpectedJson())));
public static void TestMergeInMemory()
IEnumerable<string> measturements = GetJsonMeasurements();
var settings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat };
var json = measturements.Aggregate(new JObject(),
(j, s) => { j.Merge(JObject.Parse(s), settings); return j; });
Assert.IsTrue(JToken.DeepEquals(json, JToken.Parse(GetExpectedJson())));
public static void TestMergeInMemoryWithGrouping()
IEnumerable<string> measurements = GetJsonMeasurements();
var settings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat };
.Select(j => JObject.Parse(j))
.GroupBy(j => (string)j["testTIN"])
.Select(g => g.Aggregate(new JObject(),
(j1, j2) => { j1.Merge(j2, settings); return j1; })
Console.WriteLine(JsonConvert.SerializeObject(json, Formatting.Indented));
Assert.IsTrue(json.Count == 1 && JToken.DeepEquals(json[0], JToken.Parse(GetExpectedJson())));
static IEnumerable<string> GetJsonMeasurements()
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
static string GetExpectedJson()
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
""IsEndToEndReported"": true,
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");