Tengo 2 entidades que están relacionadas como una a muchas
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;}
}
Si trato de obtener restaurantes con reservas usando mi API
var restaurants = await _dbContext.Restaurants
.AsNoTracking()
.AsQueryable()
.Include(m => m.Reservations).ToListAsync();
.....
Recibo un error en respuesta, porque los objetos contienen referencias entre sí. Hay publicaciones relacionadas que recomiendan crear un modelo separado o agregar la configuración de NewtonsoftJson
El problema es que no quiero crear un modelo separado y la segunda sugerencia no ayudó. ¿Hay alguna forma de cargar datos sin una relación cíclica? * *
System.Text.Json.JsonException: se detectó un posible ciclo de objeto que no es compatible. Esto puede deberse a un ciclo o si la profundidad del objeto es mayor que la profundidad máxima permitida de 32. en System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected (Int32 maxDepth) en System.Text.Json.JsonSerializer.Write (Utf8JsonWriterizer , Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions opciones, WriteStack & state) en System.Text.Json.JsonSerializer.WriteAsyncCore (Stream utf8Json, Object value, Type inputType, JsonSerializerOptions opciones, CancellationToken.tm. WriteResponseBodyAsync (contexto OutputFormatterWriteContext, codificación selectedEncoding) en Microsoft.AspNetCore.Mvc.
* *
fuente
Respuestas:
He probado su código en un nuevo proyecto y la segunda forma parece funcionar bien después de instalar el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson en primer lugar para 3.0
Pruebe con un nuevo proyecto y compare las diferencias.
fuente
.NET Core 3.1 Instalar el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson
Startup.cs Agregar servicio
fuente
Probablemente sea preferible configurar las opciones de serialización JSON en el inicio, ya que es probable que tenga casos similares en el futuro. Mientras tanto, puede intentar agregar atributos de datos a su modelo para que no se serialice: https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
fuente
Por encima trabajó también. Pero prefiero lo siguiente
Porque primero necesitamos agregar el atributo a todos los modelos, podemos tener la referencia cíclica.
fuente