如何使用Redis缓存自定义列表?

3
我为每个实体创建了两个类; 一个用于表示单个项目,另一个用于表示该实体的集合;对于单个实体(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

我应该怎么做呢?

1个回答

0
错误信息已经暴露了问题所在。
typeObject.GetValue(key) 返回一个值,但 cachedObject 却期望被赋值为一个实际的对象实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接