我正在使用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()来序列化结构

09-07 02:10