J'ai 2 entités liées comme une à plusieurs
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 j'essaie d'obtenir des restaurants avec des réservations en utilisant mon API
var restaurants = await _dbContext.Restaurants
.AsNoTracking()
.AsQueryable()
.Include(m => m.Reservations).ToListAsync();
.....
Je reçois une erreur en réponse, car les objets contiennent des références les uns aux autres. Il existe des articles connexes qui recommandent de créer un modèle distinct ou d'ajouter une configuration NewtonsoftJson
Le problème est que je ne veux pas créer de modèle séparé et la deuxième suggestion n'a pas aidé. Existe-t-il un moyen de charger des données sans relation cyclée? *
System.Text.Json.JsonException: un éventuel cycle d'objet a été détecté qui n'est pas pris en charge. Cela peut être dû à un cycle ou si la profondeur de l'objet est supérieure à la profondeur maximale autorisée de 32. sur System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected (Int32 maxDepth) sur System.Text.Json.JsonSerializer.Write (Utf8JsonWriter writer , Int32 originalWriterDepth, Int32 flushThreshold, options JsonSerializerOptions, WriteStack & state) sur System.Text.Json.JsonSerializer.WriteAsyncCore (Stream utf8Json, valeur d'objet, type inputType, options JsonSerializerOptions, CancellationToken annulationToken) sur Microsoft.AspFormTormFormer WriteResponseBodyAsync (contexte OutputFormatterWriteContext, Encoding selectedEncoding) sur Microsoft.AspNetCore.Mvc.
*
la source
Réponses:
J'ai essayé votre code dans un nouveau projet et la deuxième façon semble bien fonctionner après l'installation du package Microsoft.AspNetCore.Mvc.NewtonsoftJson d' abord pour 3.0
Essayez avec un nouveau projet et comparez les différences.
la source
.NET Core 3.1 Installez le package Microsoft.AspNetCore.Mvc.NewtonsoftJson
Startup.cs Ajouter un service
la source
Obtenir le réglage des options de sérialisation JSON au démarrage est probablement un moyen préféré car vous aurez probablement des cas similaires à l'avenir. En attendant, cependant, vous pouvez essayer d'ajouter des attributs de données à votre modèle afin qu'il ne soit pas sérialisé: https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
la source
Ci-dessus a également fonctionné. Mais je préfère ce qui suit
Parce que nous devons d'abord ajouter l'attribut à tous les modèles, nous pouvons avoir la référence cyclique.
la source