Aprendiendo a trabajar con AngularJS en Visual Studio, realice
un proyecto con generación de las entidades desde la base de datos y en el
momento de retornar una consulta de información JSON hacia AngularJS con un
objeto JsonResult empleando el método a continuación:
public JsonResult GetData(string searchText)
{
DatosSesion
Buscar = new DatosSesion();
Buscar.TextoBuscar
= searchText;
List<Persona> Personas =
Servicio.PersonaConsultar(Buscar);
return new JsonResult { Data = Personas, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
obtuve el siguiente error:
“Se detectó una referencia circular al serializar un
objeto de tipo
'System.Data.Entity.DynamicProxies.Persona_EA0C99EE64647524A7D8EA6436602CFBD1E64A795238EDD506D7FF559CCDE7FD'.”
"A circular reference was detected while serializing an object of type 'System.Data.Entity..."
Investigando en Internet encontré para el error"JSON Circular Reference Serialization Error", como primera solución el modificar
el contexto del Entity Framework de la siguiente manera:
“Contexto.Configuration.ProxyCreationEnabled = false;”
Sin embargo, la solución no era la que buscaba, pues genera problema
adicional en el cargue de las entidades relacionadas.
Posteriormente intenté con AutoMapper, sin embargo, esto
hace que generemos código adicional para transferir los datos entre objetos,
así que seguí investigando y encontré la solución a mi problema retornando un
objeto dynamic
con Newtonsoft.Json de la siguiente
manera:
public dynamic GetData(string searchText)
{
DatosSesion
Buscar = new DatosSesion();
Buscar.TextoBuscar
= searchText;
List<Persona> Personas = Servicio.PersonaConsultar(Buscar);
return Newtonsoft.Json.JsonConvert.SerializeObject(Personas, Formatting.Indented, new JsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
}
El ejemplo completo del código fuente en funcionamiento lo
puedes encontrar en el siguiente artículo: Arquitectura de N-Capas con Visual Studio .NET y AngularJS
Para finalizar les recuerdo:
Cada quien tiene su manera de matar
pulgas, así que puede haber una gran cantidad de maneras de hacer el mismo
trabajo.
Estos artículos son ejemplos, así
que, si tienes una mejor manera de hacerlo o puedes colaborarme con alguna
observación, tu comentario es bienvenido.
- · No asumo ninguna responsabilidad por el uso de lo expuesto.
- · Si los artículos son de utilidad, no olvides un “Me Gusta”, Compartirlo o dejar algún comentario.
- · Para mantener el blog se usa publicidad de google AdSense
- · El Blog utiliza cookies para registrar hábitos de navegación.
No hay comentarios:
Publicar un comentario