2017-05-18 13 views
0

ここにいくつかの助けが必要です。 DotNetコアを使用すると、IDistributedCacheを使用してRedisからオブジェクトのJSON配列を保存および取得しようとしています。以下は、私が保存したいオブジェクトがこのdotnet core RedIsにオブジェクトを保存する

public IQueryable<RuleLoadCollection_Result> GetRuleLibrary() 
    { 
     var result = _dbClient.GetRuleLibrary(); 
     _cache.Save("TestKey", result); 
     return result; 
    } 
のようにオブジェクトを保存しています、私のビズ・ロジックで

ある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); 
    } 

です

ここの出力はオブジェクトの配列です。

[{"ruleId":1,"ruleName":"a1"}] 

キャッシュから同じオブジェクト配列を返すには、どのようなコードを書きますか?私はいくつかのオプションを試しました、それらのほとんどはコンパイルエラーまたはランタイムエラーを与えました。閲覧のビットの後、私は以下を試してみましたが、それはうまくいったのですが、配列の最初の要素だけを与えています。このため

public RuleLoadCollection_Result GetRuleLibraryFromCache() 
    { 
     return (_cache.Get<List<RuleLoadCollection_Result>>("TestKey").First()); 
    } 

出力は、私は理由を理解するが、何のC#、私は私が保存されたJSON配列の裏に書くべき

{"ruleId":1,"ruleName":"a1"} 

のですか?コードの下

は、ランタイムエラーが助けてください

"Cannot create and populate list type System.Linq.IQueryable`1[RuleLoadCollection_Result]. Path '', line 1, position 1." 

ある

public IQueryable<RuleLoadCollection_Result> GetRuleLibraryFromCache() 
    { 
     return (_cache.Get<IQueryable<RuleLoadCollection_Result>>("TestKey")); 
    } 

ランタイムエラーになります。

ありがとうございました。

答えて

0

これは機能しました。

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