使用服务堆栈进行反序列化时出现问题
本文关键字:问题 反序列化 服务 堆栈 | 更新日期: 2023-09-27 18:25:15
使用servicestack从redis中获取对象列表时遇到问题。错误为"类型定义应以"{"数组开头……"
using (var redis = _redisService.GetClient())
{
redis.Set(key, myListOfThings.SerializeToString());
}
在缓存中显示为有效的可格式化JSON:
[{"id":34,"someid":1012,"stuff":"blah"},{"id":33,"someid":1012,"stuff":"dfsfd"}]
但我在检索时遇到了一个错误:
using (var redis = _redisService.GetClient())
{
return redis.Get<List<MyThing>>(key);
}
"其他信息:类型定义应以"{"开头,应为序列化类型"MyThing",得到的字符串以[my缓存中的json字符串]"
我甚至包装了它,使列表成为一个主对象的子对象,这使得JSON以"{"开头,但我仍然得到了相同的错误…
我还尝试了反序列化为数组,以及各种反序列化方法,但都在servicestack库中
有什么想法吗?
编辑其他人的信息
GetValue方法应该与SetValue齐头并进,而不是Set,因为它的编码方式。我仍然不知道为什么带有类型的Get不反序列化。
redis.Get<DataResponse>(key);
这种方法似乎奏效了:
redis.Get<string>(key).FromJson<DataResponse>()
您的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);