Maison >développement back-end >C++ >Comment résoudre l'exception « Boucle d'auto-référencement détectée » lors de la sérialisation d'une liste d'objets avec JSON.Net ?
Lors de la sérialisation d'une liste d'objets, JSON.Net peut rencontrer une exception « Boucle d'auto-référencement détectée ». Cette erreur se produit lorsqu'il y a des références circulaires dans le graphique d'objets sérialisés.
Problème spécifique
L'extrait de code fourni :
public ActionResult getRouteFromPart(int partId) { List<Route> routes = _routeService.GetRouteByPartType(partId); ... return this.AdvancedJsonResult(new { Routes = routes }, JsonRequestBehavior.AllowGet); }
lance le exception lors de la tentative de sérialisation de la liste des routes objets.
Solution
L'exception indique qu'il existe une référence circulaire dans le graphique de l'objet Route. Plus précisément, le message d'erreur mentionne un chemin de « routes[0].incomingLots[0].partNumber.partType.partNumbers ». Cela suggère qu'il existe une relation entre les objets Route et les objets PartNumber, et que la référence provoque une boucle.
Pour résoudre ce problème, vous pouvez désactiver les boucles d'auto-référencement pendant la sérialisation en configurant le sérialiseur JSON.Net. paramètres comme suit :
var settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
Ce paramètre demande à JSON.Net d'ignorer les références circulaires et de poursuivre la sérialisation processus.
Message d'exception complet
Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.PartNumber_B135A5D16403B760C3591872ED4C98A25643FD10B51246A690C2F2D977973452'. Path 'routes[0].incomingLots[0].partNumber.partType.partNumbers'.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!