0
需要一些幫助。使用DotNet核心嘗試使用IDistributedCache從Redis保存和檢索對象的JSON數組。下面是我用於存儲和Redis的緩存中讀取代碼dotnet core以RedIs存儲對象
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;
}
這裏的輸出是一個對象數組。
[{"ruleId":1,"ruleName":"a1"}]
我應該寫什麼代碼才能從緩存中返回相同的對象數組?我嘗試了幾個選項,其中大多數給出了編譯或運行時錯誤。在瀏覽之後,我在下面嘗試,它工作,但它只給出數組的第一個元素。
public RuleLoadCollection_Result GetRuleLibraryFromCache()
{
return (_cache.Get<List<RuleLoadCollection_Result>>("TestKey").First());
}
輸出,這是
{"ruleId":1,"ruleName":"a1"}
我明白爲什麼,但我應該寫JSON數組什麼C#回到我得救了嗎?
下面的代碼使運行時錯誤
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."
請幫助。
謝謝。