Cela se produit en fait parce que les objets complexes sont ce qui fait que l'objet json résultant échoue. Et cela échoue parce que lorsque l'objet est mappé, il mappe les enfants, qui mappent leurs parents, ce qui crée une référence circulaire. Json prendrait un temps infini pour le sérialiser, ce qui évite le problème de l'exception.
Le mappage d'Entity Framework produit également le même comportement, et la solution consiste à écarter toutes les propriétés indésirables.
Pour expliquer la réponse finale, le code entier serait :
public JsonResult getJson()
{
DataContext db = new DataContext ();
return this.Json(
new {
Result = (from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
}
, JsonRequestBehavior.AllowGet
);
}
Il peut également s'agir de ce qui suit, dans le cas où vous ne voulez pas que les objets à l'intérieur d'un fichier Result
propriété :
public JsonResult getJson()
{
DataContext db = new DataContext ();
return this.Json(
(from obj in db.Things select new {Id = obj.Id, Name = obj.Name})
, JsonRequestBehavior.AllowGet
);
}
1 votes
Regarde celui-là. Il existe une solution utilisant le
ScriptIgnore
attribut. stackoverflow.com/questions/1193857/subsonic-3-0-0-2-structures-tt0 votes
C'était la meilleure solution pour moi ; j'avais Jeu > Tournoi > Jeu > Tournoi > Jeu, etc. J'ai placé un
ScriptIgnore
sur la propriété Tournament.Game et cela a bien fonctionné :)0 votes
Si quelqu'un veut une solution "automatisée" (et non une meilleure pratique) pour ce problème qui ne nécessite pas de code supplémentaire, consultez ce QA : Ne pas sérialiser les références de classe Entity Framework en JSON (bibliothèque ServiceStack.Text)