我有一个我不想存储在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.根据您的需要定制它.