我在使用servicestack从redis中获取对象列表时遇到问题。错误是'类型定义应以' {'阵列....'
using (var redis = _redisService.GetClient())
{
redis.Set(key, myListOfThings.SerializeToString());
}
似乎是缓存中有效的formattable JSON:
[{"id":34,"someid":1012,"stuff":"blah"},{"id":33,"someid":1012,"stuff":"dfsfd"}]
但是我在检索时遇到错误:
using (var redis = _redisService.GetClient())
{
return redis.Get<List<MyThing>>(key);
}
&#34;其他信息:类型定义应以&#39; {&#39;开头 期待序列化类型&#39; MyThing&#39;,得到字符串开头:[my 来自缓存的json字符串]&#34;
我甚至将它包装起来,以便列表是主要对象的子代,这使得JSON以&#39; {&#39;但我仍然有同样的错误...
我也尝试反序列化到一个数组,以及各种反序列化的方法,但都在servicestack库中,
有什么想法吗?
为其他人编辑信息
GetValue方法应该与SetValue一起使用,而不是Set,因为它的编码方式。我仍然不知道为什么使用某种类型不会反序列化。
redis.Get<DataResponse>(key);
这种方法似乎可以解决问题:
redis.Get<string>(key).FromJson<DataResponse>()
答案 0 :(得分:0)
您的API使用不平衡:
如果您自己序列化POCO并将POCO保存为字符串,则应将值检索为字符串并自行反序列化,例如:
redis.SetValue(key, myListOfThings.ToJson());
var dtos = redis.GetValue(key).FromJson<List<MyThing>>();
如果您想让Redis客户端序列化它,那么您应该使用等效类型的API来代替它,例如:
redis.Set(key, myListOfThings);
var dtos = redis.Get<List<MyThing>>(key);