8

RavenDB に保存したくないプロパティがあります。JsonIgnore 属性を追加すると、RavenDB は問題なく無視しますが、WebApi も無視します。ただし、WebApi でデータを Web クライアントにシリアル化する必要があります。

RavenDB にプロパティを無視するように指示し、それでも WebApi でシリアル化するにはどうすればよいですか?

4

1 に答える 1

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

于 2013-01-06T05:43:48.463 に答える