La excepción “Self Referencing Loop Detected” con JSON.Net

Tengo este código para enviar una lista de objetos de Route a mi vista (ASP.Net MVC):

 public ActionResult getRouteFromPart(int partId) { List routes = _routeService.GetRouteByPartType(partId); if (routes == null) { return this.AdvancedJsonResult(null, JsonRequestBehavior.AllowGet); } return this.AdvancedJsonResult(new { Routes = routes }, JsonRequestBehavior.AllowGet); } 

Pero estoy obteniendo una excepción aquí en mi clase AdvancedJsonResult :

 if (Data != null) { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; string result = JsonConvert.SerializeObject(this.Data, this.Formatting, settings); response.Write(result); } 

Probé el truco “ReferenceLoopHanding.Ignore” que silencia la excepción, pero la lista aún no se pasa a la vista.

El código funciona cuando cambio routes a un solo objeto en lugar de a una lista, así que creo que al código simplemente no le gusta trabajar con una lista.

Soy nuevo en este proyecto, así que no estoy seguro de cómo solucionarlo y hacerlo feliz con el uso de una lista …

Editar: Aquí está el mensaje de excepción completo, que ocurre en la string result = JsonConvert... line.

El bucle de autorreferencia detectado con el tipo ‘System.Data.Entity.DynamicProxies.PartNumber_B135A5D16403B760C3591872ED4C98A25643FD10B51246A690C2F2D977973452’. Path ‘routes [0] .incomingLots [0] .partNumber.partType.partNumbers’.

El significado del mensaje de error es que hay un bucle de auto referencia. Debe establecer el contexto de base de datos que no desea que obtenga todas las entidades vinculadas cuando solicite algunas entidades. Se puede hacer agregando dos líneas en el constructor de la clase DbContext para deshabilitar el bucle de auto referencia como se muestra a continuación:

 public YourDbContext() : base("name = YourDbContext") { //add these lines in order to avoid from "Self referencing loop detected for ..." error this.Configuration.LazyLoadingEnabled = false; this.Configuration.ProxyCreationEnabled = false; } 

Espero que esto ayude…