修改RavenDb序列化以包含私有字段,而不仅仅是属性

时间:2016-03-19 14:08:17

标签: c# json domain-driven-design ravendb nosql

我的域模型对象大多数都有私有字段,其状态由强制不变量的原子方法修改。我真的不想使用私有属性并将它们保留为字段。

有没有办法配置RavenDb在其序列化中包含私有字段?

我认为我想要的是类似于this post中针对JSON.Net库所描述的内容,我认为RavenDb在引擎盖下使用,但是我看不到实现什么的方法。 s描述。

我可以看到有这样的:

docStore.Conventions.CustomizeJsonSerializer

但我还是无法弄清楚在哪里指示它包含字段?

1 个答案:

答案 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();