using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
string json = "{ \"data\": [ { \"country\": \"China\", \"color\" : \"Red\", \"pet\" : \"Cat\", \"name\" : \"Mark\", \"height_unit_name\" : \"cm\" }, { \"country\": \"China\", \"color\" : \"black\", \"pet\" : \"dog\", \"name\" : \"Jane\", \"height_unit_name\" : \"cm\" } ]}";
RawData rawData = JsonConvert.DeserializeObject<RawData>(json);
List<Item> items = new List<Item>();
var groupedData = rawData.data.GroupBy(x => new { country = x.country, color = x.color });
foreach (var item in groupedData)
List<Data> data = new List<Data>();
foreach (var dataItem in item)
data.Add(new Data { pet = dataItem.pet, name = dataItem.name, height_unit_name = dataItem.height_unit_name });
items.Add(new Item { country = item.Key.country, color = item.Key.color, data = data });
Console.WriteLine(JsonConvert.SerializeObject(items));
public List<RawItem> data { get; set; }
public string country { get; set; }
public string color { get; set; }
public string pet { get; set; }
public string name { get; set; }
public string height_unit_name { get; set; }
public string country { get; set; }
public string color { get; set; }
public List<Data> data { get; set; }
public string pet { get; set; }
public string name { get; set; }
public string height_unit_name { get; set; }