2017-05-18 86 views
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." 

請幫助。

謝謝。

回答

0

這工作。

public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache() 
    { 
     var result = _cache.Get<IEnumerable<RuleLoadCollection_Result>>("TestKey").AsQueryable(); 
     return result; 
    } 
相關問題