Zugehörige Daten und SerialisierungRelated data and serialization

Da EF Core Navigationseigenschaften automatisch korrigiert, können sich Zyklen in Ihrem Objektgraph ergeben.Because EF Core automatically does fix-up of navigation properties, you can end up with cycles in your object graph. Das Laden eines Blogs und der zugehörigen Beiträge führt beispielsweise zu einem Blogobjekt, das auf eine Sammlung von Beiträgen verweist.For example, loading a blog and its related posts will result in a blog object that references a collection of posts. Die einzelnen Beiträge verweisen wieder auf den Blog.Each of those posts will have a reference back to the blog.

Einige Serialisierungsframeworks lassen solche Zyklen nicht zu.Some serialization frameworks don't allow such cycles. In Json.NET wird beispielsweise die folgende Ausnahme ausgelöst, wenn ein Zyklus erkannt wird.For example, Json.NET will throw the following exception if a cycle is found.

Newtonsoft.Json.JsonSerializationException: Für die Eigenschaft „Blog“ mit dem Typ „MyApplication.Models.Blog“ wurde eine auf sich selbst verweisende Schleife erkannt.Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'Blog' with type 'MyApplication.Models.Blog'.

Wenn Sie ASP.NET Core verwenden, können Sie Json.NET so konfigurieren, dass im Objektgraph gefundene Zyklen ignoriert werden.If you're using ASP.NET Core, you can configure Json.NET to ignore cycles that it finds in the object graph. Diese Konfiguration wird in der Methode ConfigureServices(...) in Startup.cs vorgenommen.This configuration is done in the ConfigureServices(...) method in Startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    ...

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

    ...
}

Eine weitere Alternative ist die Ergänzung einer der Navigationseigenschaften mit dem [JsonIgnore]-Attribut, das Json.NET anweist, diese Navigationseigenschaft während der Serialisierung nicht zu durchlaufen.Another alternative is to decorate one of the navigation properties with the [JsonIgnore] attribute, which instructs Json.NET to not traverse that navigation property while serializing.