【问题标题】:Can ServiceStack's JsonSerializer serialize private members?ServiceStack 的 JsonSerializer 可以序列化私有成员吗?
【发布时间】:2013-08-31 21:30:19
【问题描述】:

我主要关心的是 ServiceStack 的 Redis 客户端。我有一堆要存储在缓存中的实体。它们的成员大多是封装的(私有的),其中一些没有任何公共访问器。 ServiceStack 的序列化程序是否允许我在 Redis 中存储(并且很明显地获取)这些实体?或者我是否必须创建具有公共属性的“干净” POCO 类以进行序列化,这将迫使我维护任何实体的 2 个表示:一个真实的,以及它的“假” POCO 表示以将其存储在 Redis 中?

我希望答案不是后者:)

【问题讨论】:

    标签: redis servicestack jsonserializer


    【解决方案1】:

    根据设计,答案是后者。 ServiceStack 推广message-based design。有很多advantages to keeping your request/response DTO classes separate and single-purpose。 ServiceStack.Text JSON 序列化程序是 designed to serialize public properties,而不是公共或私有字段或私有属性。

    【讨论】:

      【解决方案2】:
      public static string SerializeObject(object obj, BindingFlags membersType) {               
            var typeConfigType = typeof(TypeConfig<>).MakeGenericType(obj.GetType());
      
            var prop = typeConfigType.GetMembers(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(item => item.Name == "Fields") as PropertyInfo;
            prop.SetValue(null, obj.GetType().GetFields(membersType), null);
      
            prop = typeConfigType.GetMembers(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(item => item.Name == "Properties") as PropertyInfo;
            prop.SetValue(null, new PropertyInfo[0], null);
      
            return JsonSerializer.SerializeToString(obj);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-06-23
        • 2020-09-04
        • 2013-06-25
        • 2016-10-21
        • 2012-11-03
        • 2011-10-31
        • 2012-09-07
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多