【发布时间】:2013-01-06 03:49:40
【问题描述】:
我有一个不想存储在 RavenDB 中的属性。如果我添加 JsonIgnore 属性,RavenDB 会很好地忽略,但 WebApi 也会如此。不过,我仍然希望 WebApi 将数据序列化到 Web 客户端。
如何告诉 RavenDB 忽略一个属性但仍然让 WebApi 序列化它?
【问题讨论】:
标签: asp.net-web-api json.net ravendb
我有一个不想存储在 RavenDB 中的属性。如果我添加 JsonIgnore 属性,RavenDB 会很好地忽略,但 WebApi 也会如此。不过,我仍然希望 WebApi 将数据序列化到 Web 客户端。
如何告诉 RavenDB 忽略一个属性但仍然让 WebApi 序列化它?
【问题讨论】:
标签: asp.net-web-api json.net ravendb
在 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。随心所欲地自定义它以满足您的需求。
【讨论】: