8

我有一个不想存储在 RavenDB 中的属性。如果我添加 JsonIgnore 属性,RavenDB 会很好地忽略,但 WebApi 也会如此。不过,我仍然希望 WebApi 将数据序列化到 Web 客户端。

如何告诉 RavenDB 忽略一个属性但仍然让 WebApi 序列化它?

4

1 回答 1

14

在 RavenDB 2.0 中

using Raven.Imports.Newtonsoft.Json

public class Foo
{
    [JsonIgnore]
    public string Bar { get; set; }
}

因为它使用 raven 的 json.net 内部化副本 - WebApi 不会获取该属性。

在 RavenDB 1.02.0中

您可以使用自定义 json 合同解析器直接自定义对象的 json 序列化。

public class CustomContractResolver : DefaultRavenContractResolver
{
    public CustomContractResolver(bool shareCache) : base(shareCache)
    {
    }

    protected override List<MemberInfo> GetSerializableMembers(Type objectType)
    {
        var members = base.GetSerializableMembers(objectType);

        if (objectType == typeof(Foo))
            members.RemoveAll(x => x.Name == "Baz");

        return members;
    }
}

在初始化时将其连接到您的文档存储:

documentStore.Conventions.JsonContractResolver = new CustomContractResolver(true);
documentStore.Initialize();

因为它没有连接到其他任何地方,它只会影响 RavenDB。根据您的需要自定义它。

于 2013-01-06T05:43:48.463 回答