我有一个不想存储在 RavenDB 中的属性。如果我添加 JsonIgnore 属性,RavenDB 会很好地忽略,但 WebApi 也会如此。不过,我仍然希望 WebApi 将数据序列化到 Web 客户端。
如何告诉 RavenDB 忽略一个属性但仍然让 WebApi 序列化它?
我有一个不想存储在 RavenDB 中的属性。如果我添加 JsonIgnore 属性,RavenDB 会很好地忽略,但 WebApi 也会如此。不过,我仍然希望 WebApi 将数据序列化到 Web 客户端。
如何告诉 RavenDB 忽略一个属性但仍然让 WebApi 序列化它?
在 RavenDB 2.0 中
using Raven.Imports.Newtonsoft.Json
public class Foo
{
[JsonIgnore]
public string Bar { get; set; }
}
因为它使用 raven 的 json.net 内部化副本 - WebApi 不会获取该属性。
在 RavenDB 1.0或2.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。根据您的需要自定义它。