ServiceStack JsonSerializer 不序列化公共成员

Posted

技术标签:

【中文标题】ServiceStack JsonSerializer 不序列化公共成员【英文标题】:ServiceStack JsonSerializer not serializing public members 【发布时间】:2013-06-23 07:47:57 【问题描述】:

我正在尝试使用 ServiceStack.Redis,但我注意到当我使用公共成员存储一个对象并稍后尝试获取它时,我得到了 null。

我检查并发现 ServiceStack.Redis 正在使用 ServiceStack.JsonSerializer,所以我尝试创建一个测试用例,我注意到 ServiceStack.JsonSerializer 没有序列化公共成员:

        public class ClassA
        
            public string Id;

            public string Id2  get; set; 
        


        static void Main(string[] args)
        
            ClassA t = new ClassA();
            t.Id = Guid.NewGuid().ToString("n");
            t.Id2 = Guid.NewGuid().ToString("n");

            string a = JsonSerializer.SerializeToString<ClassA>(t);

            ClassA t2 = JsonSerializer.DeserializeFromString<ClassA>(a);

            Console.WriteLine("id " + t2.Id);
            Console.WriteLine("id2 " + t2.Id2);

            Console.ReadLine();
        

如您所见(如果您测试该代码),Id(公共成员)为空,而 Id2(公共属性)与我们输入的字符串相同。

那么我做错了什么?

谢谢!

【问题讨论】:

默认 JsonSerializer 仅序列化属性。检查msdn.microsoft.com/pl-pl/library/bb410770.aspx 以获取有关可用于影响序列化过程的属性的信息。 【参考方案1】:

您可以告诉 JsonSerializer 包含公共字段。

ServiceStack.Text.JsConfig.IncludePublicFields = true;

【讨论】:

以上是关于ServiceStack JsonSerializer 不序列化公共成员的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ServiceStack 5.0 项目中使用来自 ServiceStack 4.0 的服务模型?

具有模式的 ServiceStack IRedisClient ScanAllKeys 未按预期返回结果 (ServiceStack 5.7.0)

ServiceStack:添加 Blazor 支持?

ServiceStack.OrmLite 调用存储过程

哪个 Canoe 版本与链接中为 REDIS 客户端实现提供的 soln 兼容 https://github.com/ServiceStack/ServiceStack.Redis

解决ServiceStack.Redis的6000次限制问题