Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ponieważ program EF Core automatycznie naprawia właściwości nawigacji, możesz zakończyć się cyklami na grafie obiektu. Na przykład załadowanie bloga i powiązanych wpisów spowoduje utworzenie obiektu blogu, który odwołuje się do kolekcji wpisów. Każdy z tych wpisów będzie miał odwołanie z powrotem do blogu.
Niektóre struktury serializacji nie zezwalają na takie cykle. Na przykład Json.NET zgłosi następujący wyjątek, jeśli zostanie znaleziony cykl.
Newtonsoft.Json.JsonSerializationException: Wykryto pętlę samodzielnego odwoływania się do właściwości "Blog" z typem "MyApplication.Models.Blog".
Plik System.Text.Json zgłosi podobny wyjątek w przypadku znalezienia cyklu.
System.Text.Json.JsonException: Wykryto możliwy cykl obiektów. Może to być spowodowane cyklem lub jeśli głębokość obiektu jest większa niż maksymalna dozwolona głębokość 32. Rozważ użycie metody ReferenceHandler.Preserve w JsonSerializerOptions w celu obsługi cykli.
Jeśli używasz Json.NET w programie ASP.NET Core, możesz skonfigurować Json.NET, aby ignorować cykle znalezione na grafie obiektów. Ta konfiguracja jest wykonywana w metodzie ConfigureServices(...)
w Startup.cs
pliku .
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
...
}
Jeśli używasz pliku System.Text.Json, możesz go skonfigurować w następujący sposób.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
...
}
Inną alternatywą jest zignorowanie właściwości nawigacji, które powodują cykl serializacji JSON. Jeśli używasz Json.NET, możesz ozdobić jedną z właściwości nawigacji za pomocą atrybutu [JsonIgnore]
, który nakazuje Json.NET, aby nie przechodzić przez właściwość nawigacji podczas serializacji. W przypadku pliku System.Text.Json możesz użyć atrybutu [JsonIgnore]
System.Text.Json.Serialization
w przestrzeni nazw, aby osiągnąć ten sam efekt.