我正在尝试使用ServiceStack.Redis的类型化客户端;但每当我使用类类型时,它不保存值,只返回其每个属性的默认值。但是,如果我只使用简单的数据类型,它就可以工作。
我正在使用ServiceStack.Redis版本3.9.71,MS Visual Studio 2013 Ultimate和MSOpenTechRedis for Windows 64位版本2.6.12在localhost上运行。
以下是重现此问题的代码:
using ServiceStack.Redis;
class Program
{
static void Main(string[] args)
{
using (IRedisClient client = new RedisClient())
{
var typedClient = client.As<TwoInts>();
TwoInts twoIntsSave = new TwoInts(3, 5);
typedClient.SetEntry("twoIntsTest", twoIntsSave);
TwoInts twoIntsLoad = typedClient.GetValue("twoIntsTest");
//twoIntsLoad is incorrectly (0, 0)
}
using (IRedisClient client = new RedisClient())
{
var typedClient = client.As<int>();
int intSave = 4;
typedClient.SetEntry("intTest", intSave);
int intLoad = typedClient.GetValue("intTest");
//intLoad is correctly 4
}
}
}
class TwoInts
{
public int Int1;
public int Int2;
public TwoInts(int int1, int int2)
{
Int1 = int1;
Int2 = int2;
}
}
答案 0 :(得分:3)
默认情况下,ServiceStack的JSON Serializer仅序列化公共属性而不是字段。您可以将字段更改为属性,例如:
class TwoInts
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
或者使用以下命令配置JSON Serializer以序列化公共字段:
JsConfig.IncludePublicFields = true;