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 ?

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 ?

Barbara Streisand
Libérer: 2024-12-28 07:56:10
original
738 Les gens l'ont consulté

How to Resolve the

Exception « Boucle d'auto-référencement détectée » 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);
}
Copier après la connexion

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
};
Copier après la connexion

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'.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal