ServiceStack.Redis сохраняет пустой объект в кеше

Я пытаюсь реализовать кеш Redis для моего проекта С#. Я использовал redisClient, который хорош для хранения обычных типов данных, таких как int и строки, но не для хранения объектов. Затем я перешел к RedisTypedClient, который должен хранить мой объект в 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 в Windows, и, возможно, я делаю какую-то ошибку. Но я не могу заставить его работать. Любая помощь будет оценена.


person Pankaj Basnal    schedule 04.11.2015    source источник
comment
Обратите внимание, что ServiceStack является коммерчески поддерживаемым продуктом. См. бесплатные квоты на servicestack.net.   -  person thepirat000    schedule 04.11.2015


Ответы (1)


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

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;
person mythz    schedule 04.11.2015