我正在尝试为 JObjects 实现缓存.
I'm trying to implement a cache for JObjects.
我很惊讶他们没有覆盖 GetHashCode 方法,因此我不能将它用作唯一键.
I was surprised to see that they didn't override the GetHashCode method and therefore, I can't use it as a unique key.
由于我的 json 非常大,我不想使用 JObject.ToString().GetHashCode 作为解决方案.
Since my json's are pretty large, I don't want to use JObject.ToString().GetHashCode as a solution.
我确实看到他们有一个名为 GetDeepHashCode 的内部方法,但该实现基于其他受保护的属性,因此,我无法复制"代码并从中创建扩展方法.
I did see that they have an internal method called GetDeepHashCode but the implementation is based on other protected properties and therefore, I cannot "copy" the code and create an extension method from it.
我也不想使用反射并调用内部 GetDeepHashCode 方法.
I also don't want to use reflection and invoke the internal GetDeepHashCode method.
我正在寻找一种为 JObject 创建唯一缓存键的方法,并且我不希望该方法在性能方面过于昂贵.
I'm looking for a way to create a unique cache key for a JObject and I don't want the method to be extra expensive when it comes to performance.
你可以使用JTokenEqualityComparer.GetHashCode(JToken token) 用于此目的.它提供对您看到的 GetDeepHashCode() 方法的访问.
You can use JTokenEqualityComparer.GetHashCode(JToken token) for this purpose. It provides access to the GetDeepHashCode() method you saw.
var obj = JToken.Parse(jsonString);
var comparer = new JTokenEqualityComparer();
var hashCode = comparer.GetHashCode(obj);
请注意 JTokenEqualityComparer.Equals(JToken x, JToken y) 调用 JToken.DeepEquals() (来源) 所以这个比较器适合用作 IEqualityComparer<JToken> 在构建 LINQ-to-JSON 对象的哈希表或字典时,需要值的唯一性.
Note that JTokenEqualityComparer.Equals(JToken x, JToken y) calls JToken.DeepEquals() (source) so this comparer is suited for use as an IEqualityComparer<JToken> when constructing hash tables or dictionaries of LINQ-to-JSON objects and uniqueness of values is desired.
这篇关于如何为 JObject 创建唯一的哈希码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
读取 XML 时忽略空格Ignore whitespace while reading XML(读取 XML 时忽略空格)
带有检查空元素的 XML 到 LINQXML to LINQ with Checking Null Elements(带有检查空元素的 XML 到 LINQ)
在 C# 中读取带有未闭合标签的 XMLReading XML with unclosed tags in C#(在 C# 中读取带有未闭合标签的 XML)
在 C# 中使用 Html 敏捷性解析表格、单元格Parsing tables, cells with Html agility in C#(在 C# 中使用 Html 敏捷性解析表格、单元格)
使用 LINQ 从 xml 中删除元素delete element from xml using LINQ(使用 LINQ 从 xml 中删除元素)
解析格式错误的 XMLParse malformed XML(解析格式错误的 XML)