[ASP.NET Web API] Personalizando la serialización de los objetos en Json

Posted on Actualizado enn


Hola a todos, en algunas ocasiones cuando exponemos nuestras entidades a través de algún servicio (para este caso REST), la respuesta que entregamos al cliente tiene en algunas ocasiones toda la información de la entidad y/o los nombres por defecto de los atributos, sin embargo en algunas casos necesitamos realizar la personalización de 1. Los nombres de los atributos y 2. La cantidad de atributos que van a entregarse en la respuesta.

Para solucionar los dos casos anteriores, tenemos varias opciones, como utilizar DTO’s (luego lo veremos con AutoMapper) y lo otra es personalizar dicha serialización decorando las propiedades de la entidad con algunos atributos.

Para iniciar, tenemos el siguiente modelo:

public class Client
{
	public int ClientId { get; set; }

	public string Name { get; set; }

	public string LastName { get; set; }

	public string City { get; set; }
	
	public string Password { get; set; }
}

Ahora un controlador bien sencillo:

public class ClientController : ApiController
{
	private readonly List<Client> clients = new List<Client>(){
		new Client(){ ClientId = 1, Name = "Julio", LastName = "Avellaneda", City  = "Bogotá", Password = "123456"},
		new Client(){ ClientId = 1, Name = "Juan", LastName = "Ruiz", City  = "Bogotá", Password = "123456"}
	};

	public IEnumerable<Client> GetClients()
	{
		return clients;
	}
}

Si entonces ejecutamos y probamos (en este caso usemos fiddler):

Fiddler 1

Vemos que la respuesta tiene todos los campos de la entidad y que los nombres de cada propiedad están tal cual en nuestra entidad, para cambiar ese comportamiento vamos a usar dos atributos:

  • JsonProperty: Permite personalizar el nombre al serializar el atributo.
  • JsonIgnore: Especifíca que un atributo no debe ser serializado.

Aplicando los dos atributos anteriores sobre la entidad tenemos:

public class Client
{
	[JsonProperty(PropertyName="Id")]
	public int ClientId { get; set; }

	[JsonProperty(PropertyName = "Nombre")]
	public string Name { get; set; }

	[JsonProperty(PropertyName = "Apellido")]
	public string LastName { get; set; }

	[JsonProperty(PropertyName = "Ciudad")]
	public string City { get; set; }
	
	[JsonIgnore]
	public string Password { get; set; }
}

Y si volvemos a probar:

Fiddler 2

Y listo, nos vemos en otro post amigos!

4 comentarios sobre “[ASP.NET Web API] Personalizando la serialización de los objetos en Json

    Juan David Nicholls escribió:
    11/12/2013 en 17:03

    Excelente Post Son Goku, precisamente me encontraba aprendiendo esto😀

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s