ASP.NET MVC – Obter retorno Json pelo Controller

Standard

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;
}


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

One thought on “ASP.NET MVC – Obter retorno Json pelo Controller

Leave a Reply

Your email address will not be published. Required fields are marked *