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 创建唯一的哈希码?
基础教程推荐
- 如何激活MC67中的红灯 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01