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