使用服务堆栈进行反序列化时出现问题

本文关键字:问题 反序列化 服务 堆栈 | 更新日期: 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);