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 string[] order { get; set; }
public class IEnumerableComparer<TEnumerable, TElement> : IEqualityComparer<TEnumerable> where TEnumerable : IEnumerable<TElement>
public bool Equals(TEnumerable x, TEnumerable y)
return Object.ReferenceEquals(x, y) || (x != null && y != null && x.SequenceEqual(y));
public int GetHashCode(TEnumerable obj)
return obj.Where(e => e != null).Select(e => e.GetHashCode()).Aggregate(17, (a, b) => 23 * a + b);
public static void Test()
var jsonString = GetJson();
var items = JsonConvert.DeserializeObject<List<Order>>(jsonString);
.Select(i => i.order.OrderBy(s => s, StringComparer.Ordinal).ToArray())
.GroupBy(s => s, new IEnumerableComparer<string [], string>())
.OrderByDescending(g => g.Count())
.Select(a => new Order { order = a });
var sortedItems = query.ToList();
Console.WriteLine(JsonConvert.SerializeObject(sortedItems, Formatting.Indented));
var json = @"[{ ""order"":[""Order1""]},{ ""order"":[""Order2""]}, { ""order"":[""Order2"", ""Order3""]}, { ""order"":[""Order1"", ""Order2""]}, { ""order"":[""Order2"", ""Order3""]}]
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: ");