我关心的主要是 ServiceStack 的 Redis 客户端。我有一堆要存储在缓存中的实体。它们的成员大多是封装的(私有的),其中一些没有任何公共访问器。ServiceStack 的序列化程序是否允许我在 Redis 中存储(并且很明显地获取)这些实体?或者我是否必须创建具有公共属性的“干净” POCO 类以进行序列化,这将迫使我维护任何实体的 2 个表示:一个真实的,以及它的“假” POCO 表示以将其存储在 Redis 中?
我希望答案不是后者:)
我关心的主要是 ServiceStack 的 Redis 客户端。我有一堆要存储在缓存中的实体。它们的成员大多是封装的(私有的),其中一些没有任何公共访问器。ServiceStack 的序列化程序是否允许我在 Redis 中存储(并且很明显地获取)这些实体?或者我是否必须创建具有公共属性的“干净” POCO 类以进行序列化,这将迫使我维护任何实体的 2 个表示:一个真实的,以及它的“假” POCO 表示以将其存储在 Redis 中?
我希望答案不是后者:)
根据设计,答案是后者。ServiceStack 提倡基于消息的设计。将您的请求/响应 DTO 类分开和单一用途有很多优点。ServiceStack.Text JSON 序列化程序旨在序列化公共属性,而不是公共或私有字段或私有属性。
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);
}