L'erreur suivante s'est produite lors de la tentative de conversion d'un objet d'entité en chaîne JSON. J'utilise C # MVC4 avec la conception du premier code DB. Cela semble lié au fait que les FK et les relations entre les tables créent ce problème. Quelle sera la solution de contournement?
Une référence circulaire a été détectée lors de la sérialisation d'un objet de type System.Data.Entity.DynamicProxies.User
mon code est
User ma = db.user.First(x => x.u_id == id);
return Json(ma, JsonRequestBehavior.AllowGet);
C'est parce qu'il essaie de charger des objets enfants et qu'il est peut-être en train de créer une boucle circulaire qui ne finira jamais (a => b, b => c, c => d, d => a)
vous pouvez le désactiver uniquement pour ce moment particulier, comme suit. dbcontext ne chargera donc pas les objets enfants des clients, à moins que la méthode Include ne soit appelée sur votre objet.
db.Configuration.ProxyCreationEnabled = false;
User ma = db.user.First(x => x.u_id == id);
return Json(ma, JsonRequestBehavior.AllowGet);
Mon problème est résolu en utilisant ceci:
//initialize model db
testdbEntities dc = new testdbEntities();
//get employee details
List<Employee1> lst = dc.Employee1.ToList();
//selecting the desired columns
var subCategoryToReturn = lst.Select(S => new {
Employee_Id = S.Employee_Id,
First_Name = S.First_Name,
Last_Name = S.Last_Name,
Manager_Id = S.Manager_Id
});
//returning JSON
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);
J'avais le même problème, ce que j'ai fait est de ne transmettre que la colonne nécessaire pour visualiser, dans mon cas. seulement 2.
List<SubCategory> lstSubCategory = GetSubCateroy() // list from repo
var subCategoryToReturn = lstSubCategory.Select(S => new { Id = S.Id, Name = S.Name });
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);
Exception de référence circulaire détectée lors de la sérialisation d'un objet en JSON
Pourquoi ne pas créer une classe pour contenir le contenu de la requête? Cela a fonctionné pour moi
il essaie de charger des objets enfants et peut créer une propriété de boucle circulaire qui ne finira jamais.
de plus, vous utilisez [ScriptIgnore], ne sérialiserez pas la propriété publique ou le champ public . Regardez ceci:
public class BookingHotel : IntBaseEntity
{
public string BookingName { get; set; }
public string BookingReference { get; set; }
public DateTime? CheckInDate { get; set; }
public DateTime? CheckOutDate { get; set; }
public int HotelId { get; set; }
[ScriptIgnore]
public Hotel Hotel { get; set; }
}