2015-11-04 4 views
1

Я пытаюсь реализовать кеш redis для моего проекта C#. Я использовал redisClient, который хорош для хранения нормальных типов данных, таких как int и строки, но не для хранения объектов. Затем я переместился на RedisTypedClient, который должен хранить мой объект в redis, но он хранит пустой объект. И когда я пытаюсь восстановить этот объект, он создает новый объект и возвращает его.ServiceStack.Redis хранит пустой объект в кеше

Вот мой тестовый код, который я пытаюсь получить, но он не работает.

internal class Test 
{ 
    public int a; 
    public int b; 
    public string s; 

    public void show() 
    { 
     Console.WriteLine(a + " " + b + " " + s); 
    } 
} 

public class Program 
{ 
    private static void Main(string[] args) 
    { 
     using (var redisClient = new RedisClient("localhost")) 
     { 
      var t = new List<Test>(); 

      t.Add(new Test {a = 1, b = 2}); 
      t.Add(new Test {a = 3, b = 4}); 

      var key = "e"; 

      var rtest = redisClient.As<Test>(); 

      rtest.Store(t[0]).show(); 

      Console.WriteLine(t[0].GetId()); 
      var q = rtest.GetById(t[0].GetId()); 
     } 

     Console.ReadKey(); 
    } 

Я также попытался использовать список redis.

IRedisList<Test> tl = rtest.Lists["testl"]; 
tl.Add(new Test { a = 1, b = 2 }); 
tl.Add(new Test { a = 3, b = 4 }); 
var rlist = rtest.Lists["testl"]; 

То же самое происходит и в этом случае. Он хранит пустые объекты.

Я новичок в redis на окнах, и возможно, что я ошибаюсь. Но я не могу заставить его работать. Любая помощь будет оценена.

+0

Обратите внимание, что ServiceStack является коммерчески поддержка продукт. См. [Free-quotas] (https://servicestack.net/download#free-quotas) на servicestack.net. – thepirat000

ответ

1

По умолчанию ServiceStack.Text Serializer только хранит общедоступных свойствам так что вам нужно преобразовать поля в вашем классе вы хотите сериализованным в свойство, например:

internal class Test 
{ 
    public int a { get; set; } 
    public int b { get; set; } 
    public string s { get; set; } 

    public void show() 
    { 
     Console.WriteLine(a + " " + b + " " + s); 
    } 
} 

Или вы можете изменить текст сериалайзер также сериализовать открытые поля с:

JsConfig.IncludePublicFields = true; 
+0

Большое спасибо. Это решило мою проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^