J'ai des problèmes avec une référence circulaire lorsque j'essaie de sérialiser un objet renvoyé par EF4 CTP5. J'utilise l'approche "code first" et des poco's simples pour mon modèle.
J'ai ajouté des attributs [ScriptIgnore] à toutes les propriétés qui fournissent une référence arrière à un objet et, malheureusement, tout semble fonctionner correctement si j'instancie manuellement les poco's, c'est-à-dire qu'ils se sérialisent bien en JSON et que l'attribut scriptignore est reconnu. Cependant, lorsque j'essaie de sérialiser un objet renvoyé par le DAL, je reçois l'exception de référence circulaire "Une référence circulaire a été détectée lors de la sérialisation d'un objet de type 'System.Data.Entity.DynamicProxies.xxxx'".
J'ai essayé plusieurs façons de récupérer les données, mais elles sont toutes bloquées par cette erreur :
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
TimeSlot ts = tsDao.GetById(id);
return Json(ts);
}
La méthode ci-dessous fonctionne un peu mieux car ce n'est pas l'objet proxy dynamique du créneau horaire qui provoque la référence circulaire, mais l'objet rendez-vous.
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
var ts = from t in tsDao.GetQueryable()
where t.Id == id
select new {t.Id, t.StartTime, t.Available, t.Appointment};
return Json(ts);
}
Des idées ou des solutions à ce problème ?
Mise à jour Je préférerais utiliser le sérialiseur prêt à l'emploi si possible, bien que Json.Net via nuget soit une alternative acceptable, j'espère qu'il est possible de l'utiliser comme je l'avais prévu...