RSS

ASP.NET MVC – Obter retorno Json pelo Controller

27 nov

 

Olá,

Por diversas vezes em uma aplicação ASP.NET MVC retornamos para nossa página um objeto do tipo Json, como no exemplo abaixo:

return Json(new { nome = "Rafael", idade = "22" });

Até ai tudo bem, o problema acontece quando necessitamos utilizar este retorno para um método no próprio Controller.

Para quem não sabe, Json significa “JavaScript Object Notation” e trata-se de um formato de serialização para informações, e possibilita aplicações AJAX a consumirem métodos e serviços  de uma forma muito mais simples.

Através do método de extensão abaixo, é possível obter o retorno de um método do tipo Json de uma forma MUITO simples:


/// <summary>

/// Retorna os valores referentes as propriedades informadas do objeto JSON em questão.

/// </summary>

/// <typeparam name="TSource"></typeparam>

/// <param name="json"></param>

/// <param name="propertyName"></param>

/// <returns></returns>

public static TSource ObterPropriedadeJson<TSource>(this JsonResult json, string nomePropriedade)

{

if (nomePropriedade == null)

{

throw new ArgumentNullException("nomePropriedade");

}

if (json.Data == null)

{

throw new ArgumentNullException("JsonResult.Data");

}

var propertyInfo = json.Data.GetType().GetProperty(nomePropriedade);

if (propertyInfo == null)

{

throw new ArgumentException("A propriedade '" + nomePropriedade + "' não existe no contexto '" + json.Data.GetType() + "'");

}

if (propertyInfo.PropertyType != typeof(TSource))

{

throw new ArgumentException("A propriedade '" + nomePropriedade + "' foi localizada no contexto '" + json.Data.GetType() + "', mas não do tipo esperado '" + typeof(TSource).ToString());

}

var reflectedValue = (TSource)propertyInfo.GetValue(json.Data, null);

return reflectedValue;

}

Para que nosso método de extensão funcione basta cola-lo na implementação da classe EnumerableExtensions dentro do namespace System.Web.Mvc como é exibido abaixo:


namespace System.Web.Mvc

{

public static class EnumerableExtensions

{

public static TSource ObterPropriedadeJson<TSource>(this JsonResult json, string nomePropriedade)

{

//Implementação

}

}

}

E em nosso Controller podemos chama-lo da seguinte forma, imaginando que o retorno do método chamado seria o exibido no ínicio do artigo:


JsonResult retornoJSON = (JsonResult)SelecionaUsuario();

string nomeUsuario = retornoJSON.ObterPropriedadeJson<string>("nome");

string idadeUsuario = retornoJSON.ObterPropriedadeJson<string>("idade");

Note que, o tipo definido no retorno do objeto Json deve ser exatamente o tipo retornado pelo objeto em si, e o nome da propriedade chamada também deve ser exatamente igual ao retorno do objeto no método chamado.

Com isto podemos de uma forma fácil e rápida obter o retorno de um objeto do tipo Json, sem a necessidade de criação de outro método apenas para retornar o objeto desejado.

 

Abraços e até o próximo artigo.

 

Rafael Zaccanini

rafael.zaccanini@gmail.com

 

 

 

 

Anúncios
 
1 comentário

Publicado por em 27/11/2010 em ASP.NET, ASP.NET MVC, C#

 

Tags: , , ,

Uma resposta para “ASP.NET MVC – Obter retorno Json pelo Controller

  1. Maxwel

    27/11/2010 at 4:04 pm

    Muito Bom!

     

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: