using System.Collections.Generic;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
public static void Main()
CompareJson(Json1,Json2).Dump();
CompareJson(Json2,Json3).Dump();
private static bool CompareJson(string json1,string json2)
var path1 = GetAllPaths(json1).OrderBy(x=>x).ToList();
var path2 = GetAllPaths(json2).OrderBy(x=>x).ToList();
return path1.SequenceEqual(path2);
private static IEnumerable<string> GetAllPaths(string json)
var regex = new Regex(@"\[\d*\].",RegexOptions.Compiled);
return JObject.Parse(json).DescendantsAndSelf()
.Where(jp => jp.Value is JValue)
.Select(jp => regex.Replace(jp.Path,".")).Distinct();
public static string Json1 = @"{
'title': 'example glossary',
'GlossTerm': 'Standard Generalized Markup Language',
'Abbrev': 'ISO 8879:1986',
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
public static string Json2 = @"{
'title': 'example glossary',
'GlossTerm': 'Standard Generalized Markup Language',
'Abbrev': 'ISO 8879:1986',
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
public static string Json3 = @"{
'title': 'example glossary',
'GlossTerm': 'Standard Generalized Markup Language',
'Abbrev': 'ISO 8879:1986',
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']