У меня есть 2 лица, которые связаны как один ко многим
public class Restaurant {
public int RestaurantId {get;set;}
public string Name {get;set;}
public List<Reservation> Reservations {get;set;}
...
}
public class Reservation{
public int ReservationId {get;set;}
public int RestaurantId {get;set;}
public Restaurant Restaurant {get;set;}
}
Если я пытаюсь получить рестораны с оговорками, используя мой API
var restaurants = await _dbContext.Restaurants
.AsNoTracking()
.AsQueryable()
.Include(m => m.Reservations).ToListAsync();
.....
Я получаю сообщение об ошибке, потому что объекты содержат ссылки друг на друга. Есть похожие посты, которые рекомендуют создать отдельную модель или добавить конфигурацию NewtonsoftJson
Проблема в том, что я не хочу создавать отдельную модель, и второе предложение не помогло. Есть ли способ загрузить данные без циклических отношений? *
System.Text.Json.JsonException: обнаружен возможный цикл объекта, который не поддерживается. Это может происходить из-за цикла или если глубина объекта превышает максимально допустимую глубину 32. в System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected (Int32 maxDepth) в System.Text.Json.JsonSerializer.Write (Utf8JsonWriter writer , Int32 originalWriterDepth, Int32 flushThreshold, параметры JsonSerializerOptions, WriteStack & state) в System.Text.Json.JsonSerializer.WriteAsyncCore (поток utf8Json, значение объекта, тип inputType, параметры JsonSerializerOptions, CancellationToken.Tat.ToTone.Out.ToNet.ToreStore.ForS). В Microsoft WriteResponseBodyAsync (контекст OutputFormatterWriteContext, кодировка selectedEncoding) в Microsoft.AspNetCore.Mvc.
*
источник
Ответы:
Я попробовал ваш код в новом проекте, и второй способ, кажется, хорошо работает после установки пакета Microsoft.AspNetCore.Mvc.NewtonsoftJson сначала для 3.0
Попробуйте с новым проектом и сравните различия.
источник
.NET Core 3.1 Установите пакет Microsoft.AspNetCore.Mvc.NewtonsoftJson
Startup.cs Добавить сервис
источник
Использование параметров сериализации JSON при запуске, вероятно, является предпочтительным способом, поскольку в будущем у вас, вероятно, будут похожие случаи. Тем временем, однако, вы можете попробовать добавить атрибуты данных в вашу модель, чтобы она не сериализовалась: https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
источник
Выше работал также. Но я предпочитаю следующее
Поскольку сначала нам нужно добавить атрибут ко всем моделям, мы можем иметь циклическую ссылку.
источник