Comment réparer une erreur de référence circulaire lorsque vous traitez avec Json
Cette question est une partie de mon post original ici Obtenir Les Données En Extjs GridPanel
Ci-dessous est mon Contrôleur qui lit les données à partir de sql db et puis je suis en train de coder le résultat JSON et d'envoyer les données vers mon gridview.js
public JsonResult writeRecord()
//public string writeRecord()
{
Response.Write("Survey Completed!");
SqlConnection conn = DBTools.GetDBConnection("ApplicationServices2");
string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable";
SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);
DataSet myData = new DataSet();
cmd.Fill(myData, "myTable");
conn.Open();
conn.Close();
return Json(myData, JsonRequestBehavior.AllowGet);
//return myData.GetXml();
}
C'est là que réside le problème,
avec le code ci-dessus, je reçois mon gridview table avec pas de données lors de l'exécution de gridview.js mais si j'ai directement accès à mon contrôleur de la méthode comme ceci
http://localhost:55099/GridView/writeRecord
J'obtiens cette erreur,
Une référence circulaire a été détecté lors de la sérialisation d'un objet de type 'System.De la mondialisation.CultureInfo'.
Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.
Détails De L'Exception: Système.InvalidOperationException: Une référence circulaire a été détecté lors de la sérialisation d'un objet de type 'System.De la mondialisation.CultureInfo'.
Quelqu'un peut s'il vous plaît aider..
source d'informationauteur EagleFox
Vous devez vous connecter pour publier un commentaire.
- Je utiliser l'outil suivant pour la sérialisation et la désérialisation JSON:
http://james.newtonking.com/pages/json-net.aspx
Il est très facile à utiliser et très léger.
Lors de la sérialisation de nous utiliser cette option:
Il ignore les références circulaires.
Aussi json.net de newtonking est extrêmement rapide.
Les autres options est d'utiliser DTO et carte via Automapper comme mentionné par Plongeur.
Edit: je soupçonne que votre magasin est faux:
C'est parce que quelque chose à l'intérieur de CultureInfo a une référence à lui-même (de ce type) et dans un processus de conversion en JSON, il échoue.
Pour éviter cette situation, vous devez utiliser Viewmodel (retourner au client uniquement les informations nécessaires).
Vous pouvez en lire plus ici
http://blogs.msdn.com/b/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx
Dans votre situation, vous devriez créer des ViewModels de vos données, la conversion de vos données à ces types de données et de retourner les convertir en JSON. Aux fins de la conversion d'un Modèle à l'ViewModel envisager d'utiliser AutoMapper http://automapper.codeplex.com/ ou certains outil similaire.