我有一个不想存储在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。