web-dev-qa-db-ja.com

JsonIgnore属性がASP.NETで機能していませんか?

プロジェクトに循環参照のあるオブジェクトがあります。私は[JsonIgnore]を次のようにフィールドの上に置きました:

    [JsonIgnore]
    public virtual Foobar ChildObject { get; set; }

オブジェクトをシリアル化すると、循環参照エラーが発生します。 JsonIgnoreを持たないフィールドは文字列フィールドのみであり、これを引き起こすことはありません。 JsonIgnoreを機能させるために他に何かする必要がありますか?

ありがとう!

21
chum of chance

親にリンクしている他のプロパティがある可能性があります。使用 ReferenceLoopHandling.Ignore自己参照ループを防ぐための設定。

using Newtonsoft.Json;

JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

string json = JsonConvert.SerializeObject(foobars, Formatting.None, jsSettings);
26
JustinStolle

子参照を無視するASP.NetCore実装が必要な場合は、ここにあります。

public void ConfigureServices(IServiceCollection services)
{
...

    services.AddMvc()


         .AddJsonOptions(
            options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        );

    ...
}

src: https://docs.Microsoft.com/en-us/ef/core/querying/related-data

1
burnt1ce