我正在使用与我们的缓存服务交互的拦截器(从RealProxy
扩展)。我提供密钥并返回JSON有效负载。返回类型从调用函数(MethodInfo.ReturnType
)反映出来,用于根据需要强制转换返回的object
。
public object Get(string key, Type type) {
string value = cache[key];
return JsonConvert.DeserializeObject(value, type);
}
出于好奇,我想利用泛型来实现这一目标。我知道你不能从Type变量中指定泛型类型。有没有办法完成以下任务?
public T Get<T>(string key) {
string value = cache[key];
return JsonConvert.DeserializeObject<T>(value);
}
调用代码是(简化):
Type returnType = methodInfo.ReturnType;
object cachedValue = cacheService.Get(key, returnType);
if (cachedValue != null) {
// return cached value
} else {
// continue running
}
我有兴趣这样做的原因是我想使用不同的缓存提供程序(redis,特别是StackExchange.Redis.Extensions.Newtonsoft
),我们当前的缓存/检索方法不会简单地插入调用像这样:
User cachedUser = cacheClient.Get<User>("my cache key");