Je suis la réponse à ce en dépit de son âge, car il est le 3ème résultat (pour l'instant) de Google pour "json.encoder référence circulaire" et même si je ne suis pas d'accord avec les réponses (complètement) ci-dessus, que l'utilisation de la ScriptIgnoreAttribute suppose que vous n'allez pas n'importe où dans votre code voulez traverser la relation dans l'autre sens, pour certains JSON. Je ne crois pas que le verrouillage de votre modèle en raison d'un cas d'utilisation.
Il ne m'inspirent à utiliser cette solution simple.
Depuis que vous travaillez dans une Vue en MVC, vous avez le Modèle et que vous souhaitez simplement affecter le Modèle de la ViewData.Modèle au sein de votre contrôleur, aller de l'avant et à l'utilisation d'une requête LINQ au sein de votre point de Vue à aplatir les données bien supprimer le contenu de la circulaire de référence pour le JSON que vous voulez comme ceci:
var jsonMachines = from m in machineForm
select new { m.X, m.Y, // other Machine properties you desire
Customer = new { m.Customer.Id, m.Customer.Name, // other Customer properties you desire
}};
return Json(jsonMachines);
Ou si la Machine -> de la relation Client est 1..* -> * ensuite, essayez:
var jsonMachines = from m in machineForm
select new { m.X, m.Y, // other machine properties you desire
Customers = new List<Customer>(
(from c in m.Customers
select new Customer()
{
Id = c.Id,
Name = c.Name,
// Other Customer properties you desire
}).Cast<Customer>())
};
return Json(jsonMachines);