public bool Compare(JPropertyKeyedCollection other) { if (this == other) { return(true); } // dictionaries in JavaScript aren't ordered // ignore order when comparing properties Dictionary <string, JToken> d1 = _dictionary; Dictionary <string, JToken> d2 = other._dictionary; if (d1 == null && d2 == null) { return(true); } if (d1 == null) { return(d2.Count == 0); } if (d2 == null) { return(d1.Count == 0); } if (d1.Count != d2.Count) { return(false); } foreach (KeyValuePair <string, JToken> keyAndProperty in d1) { if (!d2.TryGetValue(keyAndProperty.Key, out JToken secondValue)) { return(false); } JProperty p1 = (JProperty)keyAndProperty.Value; JProperty p2 = (JProperty)secondValue; if (p1.Value == null) { return(p2.Value == null); } if (!p1.Value.DeepEquals(p2.Value)) { return(false); } } return(true); }