ServiceStack的JsonSerializer可以序列化私有成员吗?

时间:2013-08-28 17:11:14

标签: redis servicestack jsonserializer

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

我希望答案不是后者:)

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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);
}