ServiceStack.Redis键入的客户端不保存值

时间:2014-05-17 11:28:28

标签: c# redis servicestack

我正在尝试使用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;
    }
}

1 个答案:

答案 0 :(得分:3)

默认情况下,ServiceStack的JSON Serializer仅序列化公共属性而不是字段。您可以将字段更改为属性,例如:

class TwoInts
{
    public int Int1 { get; set; }
    public int Int2 { get; set; }
}

或者使用以下命令配置JSON Serializer以序列化公共字段:

JsConfig.IncludePublicFields = true;