2

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

我希望答案不是后者:)

4

2 回答 2

8

根据设计,答案是后者。ServiceStack 提倡基于消息的设计将您的请求/响应 DTO 类分开和单一用途有很多优点。ServiceStack.Text JSON 序列化程序旨在序列化公共属性,而不是公共或私有字段或私有属性。

于 2013-08-28T18:32:13.017 回答
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);
}
于 2016-08-11T18:07:32.473 回答