J'ai une base de données mssql pour mon site Web dans 4 tables.
Quand j'utilise ceci:
public static string GetAllEventsForJSON()
{
using (CyberDBDataContext db = new CyberDBDataContext())
{
return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
}
}
Le code entraîne l'erreur suivante:
Newtonsoft.Json.JsonSerializationException: Boucle d'auto-référencement détectée pour la propriété 'CyberUser' de type 'DAL.CyberUser'. Chemin «[0] .EventRegistrations [0] .CyberUser.UserLogs [0]».
c#
serialization
json.net
Développeur passionné
la source
la source
Réponses:
J'ai juste eu le même problème avec les collections Parent / Child et j'ai trouvé ce post qui a résolu mon cas. Je voulais uniquement afficher la liste des éléments de la collection parent et je n'avais besoin d'aucune des données enfants, j'ai donc utilisé ce qui suit et cela a bien fonctionné:
Erreur JSON.NET Boucle d'auto-référencement détectée pour le type
il fait également référence à la page codeplex Json.NET à l'adresse:
http://json.codeplex.com/discussions/272371
Documentation: Paramètre ReferenceLoopHandling
la source
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
comme expliqué ici: résoudre-auto-referencing-loop-issue-when-using-newtonsoft-jsonLe correctif est d'ignorer les références de boucle et de ne pas les sérialiser. Ce comportement est spécifié dans
JsonSerializerSettings
.Seul
JsonConvert
avec une surcharge:Si vous souhaitez en faire le comportement par défaut, ajoutez un paramètre global avec du code
Application_Start()
dans Global.asax.cs:Référence: https://github.com/JamesNK/Newtonsoft.Json/issues/78
la source
Si vous utilisez ASP.NET Core MVC, ajoutez ceci à la méthode ConfigureServices de votre fichier startup.cs:
la source
Cela peut vous aider.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
la source
code
Public Sub New () Mybase.New ("name = EntityConName") End Subcode
. Maintenant, avant End Sub, ajoutezcode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = Falsecode
Cela éliminera l'erreur 'Self referencing loop' dans votre sortie json de webapi.Vous devez définir des références d'objet de conservation:
Ensuite, appelez votre requête
var q = (from a in db.Events where a.Active select a).ToList();
commeVoir: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
la source
Ajoutez «[JsonIgnore]» à votre classe de modèle
la source
J'utilise Dot.Net Core 3.1 et j'ai recherché
J'ajoute ceci à cette question, car ce sera une référence facile. Vous devez utiliser ce qui suit dans le fichier Startup.cs:
la source
pour asp.net core 3.1.3 cela a fonctionné pour moi
la source
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
la source
Parfois, vous avez des boucles parce que votre classe de type a des références à d'autres classes et que les classes ont des références à votre classe de type, vous devez donc sélectionner les paramètres dont vous avez besoin exactement dans la chaîne json, comme ce code.
la source