![]() |
Neste artigo vou mostrar como podemos exibir dados no formato JSON em um controle DataGridView. |
Vou começar com um pouco de teoria sobre o JSON:
JSON ou JavaScript Object Notation é um formato de intercâmbio de dados abertos e baseado em texto que fornece um formato de troca de dados padronizado mais adequado para aplicações baseadas em Ajax.
Basicamente o JSON se baseia na notação NOME : VALOR, onde NOME pode ser o nome que você deseja usar para identificar um objeto e VALOR o valor deste objeto.
A sintaxe JSON usa o par NOME : VALOR onde nome é definido entre aspas, seguido por dois pontos, seguido por um valor: Ex: "nome" : "Macoratti" , "font-size" : "14px;"
Em JSON os valores usados podem ser:
Os objetos JSON são definidos entre chaves {} e podem conter múltiplos pares nome:valor:
Ex: var pessoa = { "nome" : "Jose Carlos" , "sobrenome" : "Macoratti" };
var produto = {"ProdutoID":1, "Descricao":"Notebook 14", "ProdutoNumero":"PRD-5381"};
Os arrays em JSON são definidos entre colchetes [] e podem conter múltiplos objetos:
Ex1: var cores = [ "Azul" , "Branco", "Vermelho", "Amarelo" ];
Bem, agora que sabemos o que são os dados JSON, vamos partir para o nosso objetivo que é exibir dados no formato JSON em um controle DataGridView.
Antes de fazer isso precisamos saber de onde vem esses dados JSON ? E neste quesito eu vou considerar apenas duas possibilidades :
Com isso em mente vou mostrar como podemos acessar e exibir os dados em um datagridview.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
1- Consumindo uma WEB API e exibindo os dados em um DataGridview
Neste cenário os dados estão sendo originados a partir de um serviço REST criado por uma WEB API.
Eu não vou mostrar como criar uma WEB API neste artigo vou passar o link para o artigo onde eu mostro como criar a WebAPI_Produtos que iremos consumir neste artigo.
Então nosso objetivo será acessar o serviço REST disponibilizado pela Web API e exibir os dados em um controle DataGridView em uma aplicação Windows Forms.
Link para o projeto da Web API : ASP .NET Web API - Criando e Consumindo uma Web API (C#) - I
Nossa Web API disponibiliza serviços que permite acessar via URI os seguintes dados:
Com essas informações vamos criar nosso projeto Windows Forms e mandar bala...
Abra o VS Community 2015 e clique em New Project;
Selecione a Visual Basic -> Windows Forms Application;
Informe o nome Consumindo_JSON e clique no botão OK;
![]() |
No formulário padrão inclua a partir da ToolBox os seguintes controles:
1 Label = URI
1 TextBox = txtURI = http://localhost:53557/api/produtos
1 DataGridView - dgvDados
3 Buttons - btnProdutos , btnProdutoPorId, btnSair
Referenciando o pacote Microsoft.AspNet.WebApi.Client no projeto via Nuget
Para poder acessar a Web API vamos precisar referenciar o pacote “Microsoft.AspNet.WebApi.Client" em nosso projeto WPF.
No menu Tools clique em Nuget Package Manager -> Manage Nuget Packages for Solution;
Localize o pacote e instale no projeto:
Para
consumirmos serviços REST em aplicações .NET, primeiro temos que
referenciar o assembly System.Net.Http.dll. Neste assembly temos o
namespace System.Net.Http, que possui tipos para consumir serviços baseados
exclusivamente no protocolo HTTP.
Para isso basta referenciar o pacote “Microsoft.AspNet.WebApi.Client“
como fizemos.
Do lado do cliente a classe principal é a HttpClient que é responsável
por gerenciar toda a comunicação com um determinado serviço.
Criando a classe que representa a entidade do domínio
Vamos criar no projeto a classe que representa o modelo de domínio que a Web API esta expondo. No exemplo que usamos esta classe é a classe Produto.
Clique no menu Project e a seguir em Add Class e informe o nome Produto.vb e com o seguinte código:
Public Class Produto Public Property Id() As Integer Public Property Nome() As String Public Property Categoria() As String Public Property Preco() As Decimal End Class |
Criando os métodos para acessar a Web API e comsumir os dados JSON
Vamos criar agora os métodos que vão acessar e exibir os dados no formato JSON.
Defina os seguintes namespaces no formulário:
Imports
System.Net.HttpA seguir defina a seguinte variável também no formulário:
Dim Uri As StringA seguir vou definir dois métodos :
1- GetAllProdutos - que acessa a web API enviando um requisição GET assíncrona usando a URI definida e retornar todos os produtos
Private Sub GetAllProdutos() URI = txtURI.Text Using client = New HttpClient() Using response = Await client.GetAsync(URI) If response.IsSuccessStatusCode Then Dim ProdutoJsonString = Await response.Content.ReadAsStringAsync() dgvDados.DataSource = JsonConvert.DeserializeObject(Of Produto())(ProdutoJsonString).ToList() Else MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode) End If End Using End Using End Sub |
2- GetProdutoPorID - Acessa a web API enviando uma requisição GET usando a URI definida e retorna um produto
A seguir defina o código abaixo para este método
Private Sub GetProdutoPorId(codProduto As Integer)
Using client = New HttpClient()
Dim bsDados As New BindingSource()
URI = txtURI.Text + "/" + codProduto.ToString()
Dim response As HttpResponseMessage = Await client.GetAsync(URI)
If response.IsSuccessStatusCode Then
Dim ProdutoJsonString = Await response.Content.ReadAsStringAsync()
bsDados.DataSource = JsonConvert.DeserializeObject(Of Produto)(ProdutoJsonString)
dgvDados.DataSource = bsDados
Else
MessageBox.Show("Falha ao obter o produto : " + response.StatusCode)
End If
End Using
End Sub
|
Agora vamos definir no evento Click de cada Button a chamada a esses métodos:
1- Botão - Acessar Produtos
Private Sub btnProdutos_Click(sender As Object, e As EventArgs) Handles btnProdutos.Click GetAllProdutos() End Sub |
2- Botão - Produto Por ID
Private Sub btnProdutoPorID_Click(sender As Object, e As EventArgs) Handles btnProdutoPorID.Click Dim codigoProduto As Integer ' Exibe o inputbox na posição codigoProduto = InputBox("Informe o ID do produto", "Produto", 1, 100, 100) ' Se não cancelar chama o método passando o código If codigoProduto <> "" Then GetProdutoPorId(codigoProduto) End If End Sub |
Agora é só alegria..
Para testar temos que primeiro executar o projeto da WEB API de forma que o serviço esteja ativo e atendendo no endereço esperado.
Executando o projeto Web API
Executando projeto Web API iremos obter exibição da página da aplicação MVC na URL : localhost:53557/
1- Digitando : api/produtos , obtemos todos os produtos:
![]() |
2- Digitando : api/produtos/4 , obtemos o produto com id igual a 4:
![]() |
Pois bem esses são os dados JSON que vamos exibir no projeto Windows Forms.
Executando o projeto Windows Forms e exibindo JSON
Agora, com o projeto Web API em execução, executando o projeto Windows Forms iremos obter:
1- Clicando no botão - Acessar Produtos:
2- Clicando no botão - Produto Por ID
![]() |
![]() |
Será apresentada a caixa de diálogo para informar o código do produto. Informando o código e clicando em OK teremos a exibição do produto no datagridview.
Percebeu que nosso projeto Web API foi feito na linguagem C# e nosso projeto Windows Forms foi feito na linguagem VB .NET ?
Não importa a linguagem usada, podemos consumir um serviço REST em qualquer plataforma.
Na próxima parte do artigo vamos exibir dados JSON a partir de um arquivo físico.
Pegue o projeto completo aqui : Consumindo_JSON.zip (sem as referências)
Porque há um só
Deus, e um só Mediador entre Deus e os homens, Jesus Cristo homem.
1 Timóteo 2:5
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências: