VB .NET - Exibindo dados JSON em um DataGridView


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 :

  1. Os dados vem de um serviço REST ?
  2. Os dados estão em um arquivo físico ?

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:

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.Http
Imports
Newtonsoft.Json

A seguir defina a seguinte variável também no formulário:

Dim Uri As String

A 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:


José Carlos Macoratti