2014-05-17 3 views
0

Я пытаюсь использовать типизированный клиент для ServiceStack.Redis; но всякий раз, когда я использую тип класса, он не сохраняет значения и просто возвращает значение по умолчанию для каждого из его свойств. Но если я просто использую простой тип данных, он работает.ServiceStack.Redis набрал клиента, не сохраняя значения

Я использую ServiceStack.Redis версии 3.9.71, MS Visual Studio 2013 Ultimate и MSOpenTechRedis для 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; 
    } 
} 

ответ

3

ServiceStack в формате JSON Serializer по умолчанию сериализующего только общедоступные свойства не поле. Вы можете изменить поля свойств, например:

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

Или настроить JSON Serializer сериализовать открытые поля с:

JsConfig.IncludePublicFields = true; 
Смежные вопросы