Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Redis在缓存中存储空对象_C#_Caching_Redis_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Redisclient - Fatal编程技术网 servicestack,redisclient,C#,Caching,Redis,servicestack,Redisclient" /> servicestack,redisclient,C#,Caching,Redis,servicestack,Redisclient" />

C# Redis在缓存中存储空对象

C# Redis在缓存中存储空对象,c#,caching,redis,servicestack,redisclient,C#,Caching,Redis,servicestack,Redisclient,我正试图为我的c#项目实现一个redis缓存。我使用了redisClientredisClient,它可以很好地存储int和string之类的普通数据类型,但不能存储对象。然后我移动到RedisTypedClient,它应该在redis中存储我的对象,但它存储一个空对象。当我试图检索那个对象时,它会创建一个新对象并返回它 这是我的测试代码,我正试图让它工作,但它不工作 internal class Test { public int a; public int b; pu

我正试图为我的c#项目实现一个redis缓存。我使用了redisClientredisClient,它可以很好地存储int和string之类的普通数据类型,但不能存储对象。然后我移动到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();
    }
内部类测试
{
公共INTA;
公共int b;
公共字符串s;
公开展览(
{
控制台写入线(a+“”+b+“”+s);
}
}
公共课程
{
私有静态void Main(字符串[]args)
{
使用(var redisClient=new redisClient(“localhost”))
{
var t=新列表();
t、 添加(新测试{a=1,b=2});
t、 添加(新测试{a=3,b=4});
var key=“e”;
var rtest=redisClient.As();
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"];
IRedisList tl=rtest.Lists[“testl”];
tl.Add(新测试{a=1,b=2});
tl.Add(新测试{a=3,b=4});
var rlist=rtest.Lists[“testl”];
但在这种情况下也会发生同样的事情。它存储空对象

我是windows上redis的新手,可能犯了一些错误。但我无法让它工作。任何帮助都将不胜感激。

默认情况下,序列化程序只存储公共属性,因此您需要将类中要序列化的字段转换为属性,例如:

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;

请注意,ServiceStack是受商业支持的产品。请参阅ServiceStack.net上的。