asp.net-mvc-4 - 如何使用 Redis 缓存自定义列表?

标签 asp.net-mvc-4 c#-4.0 redis servicestack

每个实体都有两个类;一个代表单个项目,另一个代表这些实体的集合;

对于单个实体 (BaseItem<-MenuItem) , 我有一个基类 BaseItem哪个MenuItem继承自。

对于 MenuItems 的集合,我具有以下层次结构; (List<T> <- BaseItemList<MenuItem> <- MenuItemList) .

现在,每当我使用下面的代码来缓存 MenuItem (MenuItemList) 的集合时,它都有效 没有错误;

using (var client = _manager.GetClient()) {
     IRedisTypedClient<T> typeObject = client.As<T>();
     typeObject.SetEntry(key, value);
}

但是,当我尝试从 Redis 检索它时,出现以下错误;

using (var client = _manager.GetClient()) {
   if (client.ContainsKey(key)) {
      IRedisTypedClient<T> typeObject = client.As<T>();
      cachedObject = typeObject.GetValue(key);
   }
}

错误:

对象引用未设置到对象的实例。

堆栈跟踪

   at System.Collections.Generic.List`1.Add(T item)
   at ServiceStack.Text.Common.DeserializeListWithElements`2.ParseGenericList(String value, Type createListType, ParseStringDelegate parseFn)
   at ServiceStack.Text.Common.DeserializeList`2.<>c__DisplayClass3.<GetParseFn>b__0(String value)
   at ServiceStack.Text.Json.JsonReader`1.Parse(String value)
   at ServiceStack.Text.JsonSerializer`1.DeserializeFromString(String value)
   at ServiceStack.Redis.Generic.RedisTypedClient`1.DeserializeValue(Byte[] value)
   at ServiceStack.Redis.Generic.RedisTypedClient`1.GetValue(String key)
   at TryoutStuff.Program.Main(String[] args) in c:\Users\Orson\Documents\Visual Studio 2012\Projects\ICS\TryoutStuff\Program.cs:line 75

我该怎么做?

最佳答案

错误信息暴露了它

typeObject.GetValue(key) 返回一个值,但 cachedObject 期望分配给一个实际的对象实例。

关于asp.net-mvc-4 - 如何使用 Redis 缓存自定义列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19741091/

相关文章:

c# - 捕获对变量的 SSH 响应

PHP Redis超时,连接读取错误?

redis - 如何像mysql一样在redis中进行与操作?

c# - BadImageFormatException 调试以 x64 模式运行的网站

c# - 如何通过匹配字段或属性名称从不同的类复制数据

asp.net - 由于asp.net中对象的当前状态,因此操作无效。

javascript - Redis 在某些操作系统上将字符串保存为缓冲区,而不是其他操作系统?

asp.net-mvc-4 - Azure 移动服务与 MVC4 SimpleMembership

asp.net-mvc-4 - 如何为使用 StatusCode 404 抛出 HttpException 的 Action 编写单元测试

c# - 如何在自定义模型 Binder 中验证我的模型?