How can I create a unique hashcode for a JObject?(如何为 JObject 创建唯一的哈希码?)
问题描述
我正在尝试为 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 创建唯一的哈希码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何为 JObject 创建唯一的哈希码?
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 使用 rss + c# 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01