C# 在RedIs中存储对象的dotnet核心
这里需要帮助。使用dotnetcore,我试图使用IDistributedCache从Redis保存和检索对象的JSON数组。下面是我存储和读取Redis缓存的代码C# 在RedIs中存储对象的dotnet核心,c#,json,redis,deserialization,core,C#,Json,Redis,Deserialization,Core,这里需要帮助。使用dotnetcore,我试图使用IDistributedCache从Redis保存和检索对象的JSON数组。下面是我存储和读取Redis缓存的代码 public void Save(string key, object content, int duration) { string s; if (content is string) { s = (string)content; }
public void Save(string key, object content, int duration)
{
string s;
if (content is string)
{
s = (string)content;
}
else
{
s = JsonConvert.SerializeObject(content);
}
duration = duration <= 0 ? DefaultCacheDuration : duration;
Cache.Set(key, Encoding.UTF8.GetBytes(s), new DistributedCacheEntryOptions()
{
AbsoluteExpiration = DateTime.Now + TimeSpan.FromSeconds(duration)
});
}
public T Get<T>(string key) where T : class
{
var c = Cache.Get(key);
if (c == null)
{
return null;
}
var str = Encoding.UTF8.GetString(c);
if (typeof(T) == typeof(string))
{
return str as T;
}
return JsonConvert.DeserializeObject<T>(str);
}
在我的商业逻辑中,我是这样保存对象的
public IQueryable<RuleLoadCollection_Result> GetRuleLibrary()
{
var result = _dbClient.GetRuleLibrary();
_cache.Save("TestKey", result);
return result;
}
我应该编写什么代码来从缓存返回相同的对象数组?我尝试了几个选项,大多数都给出了编译或运行时错误。浏览了一会儿之后,我在下面尝试了一下,它成功了,但只给出了数组的第一个元素
public RuleLoadCollection_Result GetRuleLibraryFromCache()
{
return (_cache.Get<List<RuleLoadCollection_Result>>("TestKey").First());
}
我明白为什么,但我应该写什么c#到我保存的JSON数组中
下面的代码给出了运行时错误
public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache()
{
return (_cache.Get<IQueryable<RuleLoadCollection_Result>>("TestKey"));
}
请帮忙
谢谢。这很有效
public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache()
{
var result = _cache.Get<IEnumerable<RuleLoadCollection_Result>>("TestKey").AsQueryable();
return result;
}
public IQueryable GetRuleLibraryFromCache()
{
var result=_cache.Get(“TestKey”).AsQueryable();
返回结果;
}
{"ruleId":1,"ruleName":"a1"}
public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache()
{
return (_cache.Get<IQueryable<RuleLoadCollection_Result>>("TestKey"));
}
"Cannot create and populate list type System.Linq.IQueryable`1[RuleLoadCollection_Result]. Path '', line 1, position 1."
public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache()
{
var result = _cache.Get<IEnumerable<RuleLoadCollection_Result>>("TestKey").AsQueryable();
return result;
}