Antes de iniciar o artigo, faça o download dos arquivos do Wrapper .Net diretamente do nosso perfil no GitHub. Com os arquivos em mãos, adicione-os ao projeto no Visual Studio, ou se preferir, faça uma referência à .dll que também está disponível para download.
Já mostramos em outro artigo como obter o retorno da API do Buscapé no formato JSON e como tratar esse retorno de forma que os dados retornados sejam manipulados. Neste artigo, vamos utilizar uma forma mais simples e objetiva para realizar esse trabalho: através da classe JavaScriptSerializer, presente no namespace System.Web.Script.Serialization – a mesma classe que utilizamos no outro artigo. Porém, dessa vez, vamos realizar o parsing do JSON retornado direto para objetos já pré-definidos na aplicação.
Vamos utilizar o método ViewProductDetails do Wrapper.Net, que nos retorna os detalhes técnicos de um produto específico da API do Buscapé. Instancie a classe Apiki_Buscape_API, informando o seu application ID e também alterando o formato padrão de retorno para JSON e logo a seguir vamos invocar o método ViewProductDetails informando o ID de produto 337809:
Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d", string.Empty, "BR", "json");
string details = apiBuscape.ViewProductDetails(337809, string.Empty);
Response.Write(details);
Para podermos criar as classes que irão receber os dados de retorno, precisamos conhecer bem a estrutura desse objeto JSON. Vamos analisar parte da estrutura retornada pela API do Buscapé:
{"product":[{
"product":{
"totalsellers":9,
"productshortname":"Notebook Apple Macbook Air MC966BZ",
"pricemax":"5399.00",
"fulldescription":true,
"hasmetasearch":false,
"links":[
{"link":{
"type":"product",
"url":"http://compare.buscape.com.br/apple-macbook-air-mc966bz-intel-core-i5-1-7-ghz-4096-mb-256-gb.html?mdapp=100&mddtn=69672797"}},
{"link":{
"type":"specification",
"url":"http://compare.buscape.com.br/prod_ficha?idu=337809"}},
{"link":{
"type":"xml",
"url":"http://sandbox.buscape.com/service/findOfferList/564771466d477a4458664d3d/br/?productId=337809&format=json"}}
],
"pricemin":"4091.91",
"currency":{"abbreviation":"BRL"},
"id":337809,
"categoryid":6424,
"thumbnail":{"url":"http://imagem.buscape.com.br/thumbs/ensopado/6424/200x200_337809_1.jpg"},
"specification":{
"item":[
Podemos perceber nessa estrutura que temos um primeiro nó product, que contém um array product,e que por sua vez possui os detalhes que queremos do produto. Então, vamos montar a seguinte estrutura de classes:
public class JsonProductWrapper
{
public JsonProducts[] product { get; set; }
}
public class JsonProducts
{
public Product product { get; set; }
}
public class Product
{
public int totalsellers { get; set; }
public string productshortname { get; set; }
public double pricemax { get; set; }
public bool fulldescription { get; set; }
public bool hasmetasearch { get; set; }
public double pricemin { get; set; }
public int id { get; set; }
public int categoryid { get; set; }
}
A única coisa que temos nessas classes são os atributos representativos ao que temos no objeto JSON. Com essa estrutura criada, vamos capturar os dados diretamente para a classe JsonProductWrapper. A estrutura será automaticamente reconhecida pelo método Deserialize da classe JavaScriptSerializer e cada atributo encontrado será setado com o valor do JSON.
Apiki_Buscape_API.Apiki_Buscape_API apiBuscape = new Apiki_Buscape_API.Apiki_Buscape_API("564771466d477a4458664d3d", string.Empty, "BR", "json");
string details = apiBuscape.ViewProductDetails(337809, string.Empty);
JavaScriptSerializer deserializer = new JavaScriptSerializer();
JsonProductWrapper productdetails = deserializer.Deserialize<JsonProductWrapper>(details);
É isso! A classe JavaScriptSerializer faz todo o trabalho pesado de popular os objetos com os dados do JSON. Agora é só manipular o objeto JsonProductWrapper para facilmente obter os dados necessários. Não acredita? Então dê uma olhadinha na janela Watch do Visual Studio.

É necessário saber alguns detalhes antes de realizar esse processo, como o fato dos nomes dos atributos da sua classe terem que ser idênticos às chaves do objeto JSON. Por exemplo, a propriedade productshortname presente no JSON é representada pelo atributo de mesmo nome dentro da classe Product. É dessa forma que o serializer faz o mapeamento das propriedades do JSON.
Vocês devem ter percebido que o JSON de retorno desse método ViewProductDetails retorna muito mais coisa do que nós apresentamos neste artigo. Em uma próxima oportunidade vamos montar a estrutura de classes para realizar o parse completo do retorno desse método pra dentro da nossa aplicação. Fiquem de olho!







