修改 RavenDb 序列化以包括私有字段,而不仅仅是属性
Amend RavenDb serialization to include private fields, not just properties
我的域模型对象大多具有私有字段,其中它们的状态由强制不变量的原子方法修改。我真的不想使用私有属性并将它们保留为字段。
有没有办法配置 RavenDb 在其序列化中包含私有字段?
我想我想要的是类似于 this post 中为 JSON.Net 库描述的东西,我认为 RavenDb 在幕后使用它,但我看不到实现所描述内容的方法。
我可以看到有这个:
docStore.Conventions.CustomizeJsonSerializer
但我还是不知道在哪里指示它包含字段?
按照 Alexey 的建议 post 向我指出了正确的方向,post 实际上使用了已弃用的 属性 - 我就是这样做的:
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();
我的域模型对象大多具有私有字段,其中它们的状态由强制不变量的原子方法修改。我真的不想使用私有属性并将它们保留为字段。
有没有办法配置 RavenDb 在其序列化中包含私有字段?
我想我想要的是类似于 this post 中为 JSON.Net 库描述的东西,我认为 RavenDb 在幕后使用它,但我看不到实现所描述内容的方法。
我可以看到有这个:
docStore.Conventions.CustomizeJsonSerializer
但我还是不知道在哪里指示它包含字段?
按照 Alexey 的建议 post 向我指出了正确的方向,post 实际上使用了已弃用的 属性 - 我就是这样做的:
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();