Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Transformando o retorno da API em objetos com o Wrapp

Recommended Posts

Em continuação ao artigo anterior, montaremos a estrutura de classe completa para receber os dados do método ViewProductDetails.

Antes de iniciar, 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çam uma referência à .dll, que também está disponível para download.

No artigo anterior, mostramos como serializar o retorno em JSON da API do Buscapé com o Wrapper .Net e transformar esses dados em classes. Hoje vamos dar continuidade a esse assunto, terminando a estrutura de classes para receber os dados completos do método ViewProductDetails.

Hoje nós já sabemos que o segredo todo está no método Deserialize da classe JavaScriptSerializer, que irá fazer todo o trabalho pesado do parser para nós. Então, vamos completar a nossa estrutura de classes, a fim de realizar o parser de todo o JSON retornado. No artigo passado, finalizamos com as seguintes 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; }

Porém, o nosso JSON de retorno possui a seguinte estrutura completa:

{"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":[

Para começar, vamos terminar a estrutura de Produtos, parseando todos os dados possíveis. Algumas classes terão que ser adicionadas para representar os objetos do JSON, como por exemplo, Links, Currency, Thumbnail, Specification, Rating. Analisando o nó product com calma, podemos identificar melhor sua estrutura e, então, replicá-la em classes do .Net.

Para o nó product, então, teremos a seguinte estrutura de classes:

public class JsonProductWrapper

{

public JsonProducts[] product { get; set; }

}

 

#region Product Classes

 

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 Links[] links { get; set; } // New

public double pricemin { get; set; }

public Currency currency { get; set; } // New

public int id { get; set; }

public int categoryid { get; set; }

public Thumbnail thumbnail { get; set; } // New

Vejam que todos os nós ?pais? do objeto JSON estão representados na classe acima. Para alguns deles, vamos utilizar somente os tipos int, string, bool, pois estes já atendem ao tipo do campo. Porém em outros casos, precisamos criar novas classes para representar as estruturas mais complexas, de Category e Details.

#region Category Classes

 

public class JsonCategory

{

public int id { get; set; }

public Thumbnail thumbnail { get; set; }

public bool hasoffer { get; set; }

public string name { get; set; }

public int parentcategoryid { get; set; }

public Links[] links { get; set; }

public bool isfinal { get; set; }

}

 

#endregion Category Classes

 

#region Details Classes

 

public class JsonDetails

{

public string message { get; set; }

public string elapsedtime { get; set; }

public string status { get; set; }

public int code { get; set; }

public string applicationversion { get; set; }

public Date date { get; set; }

public string applicationpath { get; set; }

Pronto, agora é só utilizar o método Deserialize, da classe JavaScriptSerializer, para que o .NET faça todo o serviço pesado de converter o JSON em objetos. Agora, podemos acessar os objetos de forma natural para recuperar todos os dados retornados pela API do Buscapé.

Abaixo, o código completo que utilizamos nesse artigo:

public partial class jsonII : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

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

 

}

}

 

public class JsonProductWrapper

{

public JsonProducts[] product { get; set; }

public JsonCategory category { get; set; }

public JsonDetails details { get; set; }

public bool schk { get; set; }

public int page { get; set; }

public int totalresultsavailable { get; set; }

public int totalpages { get; set; }

public string match { get; set; }

public int totalresultsreturned { get; set; }

}

É isso developers! Continuem acompanhando nossos artigos e participem do nosso fórum de discussões.

 

http://imasters.com.br/artigo/24253/apis-buscape/transformando-o-retorno-da-api-em-objetos-com-o-wrappernet-parte-02

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.