我正在使用servicestack redis。我有一个 struct
我想把它储存在redis里。但是当我尝试获取它时,它总是返回默认值。但如果我改变了主意 struct
为了 class
工作正常。有什么想法吗?
public struct PersonStruct
{
public string Name { get; set; }
public int Year { get; set; }
}
单元测试(它总是通过,因为redis返回结构的默认值)
var obj = new PersonStruct() {Name = "SomeName", Year = 1235};
_redis.Set(key, obj, TimeSpan.FromMinutes(2));
var result = _redis.Get<PersonStruct>(key);
Assert.AreEqual(default(PersonStruct), result);
2条答案
按热度按时间rqmkfv5c1#
对于结构,必须使用自定义序列化程序/反序列化程序
似乎是通过调用
ToString()
fcwjkofz2#
与struct的区别在于,它们被视为单个标量值,而不是序列化结构值的每个属性,例如date、day、dayofweek、dayofyear、hour等对于datetime,只序列化datetime、timespan等的单个标量值。
servicestack.text序列化程序按约定执行此操作,它将尝试在其中使用
ToString()
序列化为单个字符串值TStruct(string)
构造函数来反序列化值。或者,您可以使用静态ParseJson()
方法。因此,如果要反序列化结构,则需要通过重写
ToString()
并提供一个字符串构造函数,例如:然后您就可以在servicestack.redis类型的api中使用它,如这个gistlyn示例所示。