我正在使用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);
最佳答案
对于结构,您必须使用自定义序列化器/反序列化器
var obj = new PersonStruct() {Name = "SomeName", Year = 1235};
var bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(obj));
_redis.Set(key, bytes, TimeSpan.FromMinutes(2));
var getBytes = _redis.Get(key);
var result = JsonSerializer.Deserialize<PersonStruct>(Encoding.UTF8.GetString(getBytes));
似乎是通过调用ToString()
来序列化结构