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 にのみ影響します。ニーズに合わせてカスタマイズしてください。