Как игнорировать регистр при использовании JTokenEqualityComparer?
JTokenEqualityComparer comp = new JTokenEqualityComparer();
// arrange
var obj1 = new JObject();
obj1.Add("First Name", "foo");
obj1.Add("Last Name", "bar");
var obj2 = new JObject();
obj2.Add("First Name", "Foo");
obj2.Add("Last Name", "Bar");
// act
var hashCode1 = comp.GetHashCode(obj1);
var hashCode2 = comp.GetHashCode(obj2);
// assert
Assert.Equal(hashCode1, hashCode2);
Обновление 1
Я хочу сравнить два объекта JO. Объекты могут быть глубоко сложным объектом. JToken имеет статический метод DeepEquals
, который сравнивает два глубоких объекта. Однако я хочу получить уникальное хеш-значение и сохранить его в базе данных SQL. Таким образом, процедуры sql также могут выполнять сравнение.
из SO
Я видел, что у них есть внутренний метод с именем GetDeepHashCode, но
реализация основана на других защищенных свойствах и
поэтому я не могу «скопировать» код и создать метод расширения
из него
и решение
Для этого вы можете использовать JTokenEqualityComparer.GetHashCode (токен JToken)
цель. Он предоставляет доступ к методу GetDeepHashCode (), который вы видели.