我的域模型对象大多数都有私有字段,其状态由强制不变量的原子方法修改。我真的不想使用私有属性并将它们保留为字段。
有没有办法配置RavenDb在其序列化中包含私有字段?
我认为我想要的是类似于this post中针对JSON.Net库所描述的内容,我认为RavenDb在引擎盖下使用,但是我看不到实现什么的方法。 s描述。
我可以看到有这样的:
docStore.Conventions.CustomizeJsonSerializer
但我还是无法弄清楚在哪里指示它包含字段?
答案 0 :(得分:3)
根据Alexey建议的帖子向我指出正确的方向,帖子实际上使用了一个弃用的属性 - 这就是我做的方式:
public class IncludeNonPublicMembersContractResolver : DefaultContractResolver
{
protected override List<MemberInfo> GetSerializableMembers(Type type)
{
var members = new List<MemberInfo>();
members.AddRange(type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance));
members.AddRange(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance));
return members;
}
}
docStore.Conventions.JsonContractResolver = new IncludeNonPublicMembersContractResolver();