Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RedIs中存储对象的dotnet核心_C#_Json_Redis_Deserialization_Core - Fatal编程技术网

C# 在RedIs中存储对象的dotnet核心

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; }

这里需要帮助。使用dotnetcore,我试图使用IDistributedCache从Redis保存和检索对象的JSON数组。下面是我存储和读取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;
    }
我应该编写什么代码来从缓存返回相同的对象数组?我尝试了几个选项,大多数都给出了编译或运行时错误。浏览了一会儿之后,我在下面尝试了一下,它成功了,但只给出了数组的第一个元素

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;
    }