using System.Collections.Generic;
public string TableNumber { get; set; }
public string TableId { get; set; }
public List<TableMenuItem> tableMenuItems { get; set; }
public decimal TotalPrice { get; set; }
public class TableMenuItem
public string Id { get; set; }
public string Name { get; set; }
public List<TableMenuItemCondiment> tableMenuItemCondiment { get; set; }
public double Price { get; set; }
public double Count { get; set; }
public class TableMenuItemCondiment
public string Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public class TableMenuItemComparer : IEqualityComparer<TableMenuItem>
public bool Equals(TableMenuItem x, TableMenuItem y)
if (x.tableMenuItemCondiment == null && y.tableMenuItemCondiment == null)
else if (x.tableMenuItemCondiment == null && y.tableMenuItemCondiment != null ||
x.tableMenuItemCondiment != null && y.tableMenuItemCondiment == null)
x.tableMenuItemCondiment.SequenceEqual(y.tableMenuItemCondiment, new TableMenuItemCondimentComparer());
public int GetHashCode(TableMenuItem obj)
if (obj.tableMenuItemCondiment == null)
return obj.Id.GetHashCode();
return obj.Id.GetHashCode() ^ obj.tableMenuItemCondiment.Aggregate(0, (a, c) => a ^ c.Id.GetHashCode() ^ c.Name.GetHashCode() ^ c.Price.GetHashCode());
public class TableMenuItemCondimentComparer : IEqualityComparer<TableMenuItemCondiment>
public bool Equals(TableMenuItemCondiment x, TableMenuItemCondiment y)
public int GetHashCode(TableMenuItemCondiment obj)
return obj.Id.GetHashCode() ^
public static void Main()
'TableId': '81872d39-9480-4d2d-abfc-b8e4f33a43b6',
'Id': '4664a2d3-c0af-443d-8af5-2bd21e71838b',
'tableMenuItemCondiment': [
'Id': '9b1f01a0-0313-46b6-b7f1-003c0e846136',
'Id': '38a9cce6-f20c-4f78-b6c9-c15e79ecc8f1',
'Id': 'cb3a7811-668b-4e45-bce3-e6b2b13af9e1',
'Id': '4664a2d3-c0af-443d-8af5-2bd21e71838b',
'tableMenuItemCondiment': [
'Id': 'c3c62f7d-987d-4523-849c-932334db4e4f',
'Id': 'cbb16028-6e77-4e4b-a1c9-d969e804f093',
'Id': '16f9efc2-73d3-4a09-87fc-e1fb76957ed2',
var tableCheckObject = JsonConvert.DeserializeObject<TableCheck>(json);
var result = new TableCheck()
TableNumber = tableCheckObject.TableNumber,
TableId = tableCheckObject.TableId,
TotalPrice = tableCheckObject.TotalPrice,
tableMenuItems = tableCheckObject.tableMenuItems
.GroupBy(item => item, new TableMenuItemComparer())
.Select(grp => new TableMenuItem
tableMenuItemCondiment = grp.Key.tableMenuItemCondiment,
Console.WriteLine(JsonConvert.SerializeObject(result, Formatting.Indented));