jueves, 19 de marzo de 2015

Web Api DataContractSerializer error

Aviso a navegantes, esto es un post de batalla.

Escenario


Realizando llamadas a una webapi al devolver un tipo complejo tienes problemas de serialización y salta una excepción similar a esta.

'System.Data.Entity.DynamicProxies.XXX_7633E4D7A7997E6C5CA3E4205926A0AEB77203C4D81CA9E9B8FB1A1BFC64F93A' with data contract name 'XXX_7633E4D7A7997E6C5CA3E4205926A0AEB77203C4D81CA9E9B8FB1A1BFC64F93A:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

Causa


Problema de serialización.

Solución


Cambia la firma del método para devolver un objecto de tipo IHttpActionResult (en general trabajando con apis todas las acciones deberían devolver un objeto que implemente esta interfaz). En la acción si te dispones a devolver Json cambia la respuesta por un código similar a este.
public IHttpActionResult Get()
{
   //Do Something
    return Json(responseObjectToSerialize);
}

Hay formas de controlar la serialización a partir de configuración de la api por si necesitas algún comportamiento especial a nivel de performance o controlar algún aspecto de la serialización… sino es así no te líes y aplica la solución de más arriba.

Otra consideración es que estamos devolviendo objetos, que siendo puristas, son entities que uso para el acceso a datos, por tanto no deberían viajar en la comunicación entre cliente y api.

Posiblemente hayas llegado a areaTIC Googleando a partir del texto de error… en ese caso espero que la solución que te paso ayude! Ya que estás aquí recuerda guardar nuestra url en favoritos que cuando estamos inspirados hacemos algún articulo interesante.

Que vaya bien!

No hay comentarios:

Publicar un comentario