我有一个我不想存储在RavenDB中的属性。如果我添加JsonIgnore属性,RavenDB将忽略罚款,但WebApi也是如此。我仍然希望WebApi将数据序列化到Web客户端。
如何告诉RavenDB忽略某个属性但仍然有WebApi序列化它?
答案 0 :(得分:14)
在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。根据您的需要定制它。