Aracılığıyla paylaş


İlgili veriler ve serileştirme

EF Core, gezinti özelliklerini otomatik olarak düzeltdiğinden, nesne grafınızdaki döngülerle sonuçlanabilir. Örneğin, bir blogu ve ilgili gönderilerini yüklemek, bir gönderi koleksiyonuna başvuran bir blog nesnesine neden olur. Bu gönderilerin her birinin bloga bir başvurusu olacaktır.

Bazı serileştirme çerçeveleri bu tür döngülere izin vermez. Örneğin, Json.NET bir döngü bulunursa aşağıdaki özel durumu oluşturur.

Newtonsoft.Json.JsonSerializationException: 'Blog' özelliği için 'MyApplication.Models.Blog' türüne sahip kendi kendine başvuru döngüsü algılandı.

Bir döngü bulunursa System.Text.Json da benzer bir özel durum oluşturur.

System.Text.Json.JsonException: Olası bir nesne döngüsü algılandı. Bunun nedeni bir döngü veya nesne derinliğinin izin verilen maksimum derinlik olan 32'den büyük olması olabilir. Döngüleri desteklemek için JsonSerializerOptions üzerinde ReferenceHandler.Preserve kullanmayı göz önünde bulundurun.

ASP.NET Core'da Json.NET kullanıyorsanız, nesne grafiğinde bulduğu döngüleri yoksaymak için Json.NET yapılandırabilirsiniz. Bu yapılandırma içindeki yönteminde ConfigureServices(...) Startup.csyapılır.

public void ConfigureServices(IServiceCollection services)
{
    ...

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

    ...
}

System.Text.Json kullanıyorsanız, bu şekilde yapılandırabilirsiniz.

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
        });

    ...
}

Bir diğer alternatif de JSON serileştirme döngüsüne neden olan gezinti özelliklerini yoksaymaktır. Json.NET kullanıyorsanız, gezinti özelliklerinden birini özniteliğiyle [JsonIgnore] süsleyebilirsiniz. Bu özellik, Json.NET seri hale getirme sırasında bu gezinti özelliğinden geçmemelerini sağlar. System.Text.Json için, aynı etkiyi [JsonIgnore] elde etmek için ad alanında System.Text.Json.Serialization özniteliğini kullanabilirsiniz.