C#-  Convertendo JSON para DataTable


Hoje veremos como converter dados no formato JSON para um DataTable exibindo as informações em um GridView em uma aplicação Windows Forms.

Neste artigo vamos consumir dados REST no formato JSON, e, como exemplo vou obter os dados do serviço https://jsonplaceholder.typicode.com/ que fornece algumas APIs para podermos consumir.

Atualmente temos 6 recursos disponíveis acessados via url :

/posts    100 posts
/comments    500 comments
/albums    100 albums
/photos    5000 photos
/todos    200 todos
/users    10 users

Vejamos então como consumir esses dados REST no formato JSON e convertê-los para um DataTable exibindo-os em um controle DataGridView no Windows Forms.

Recursos usados:

Criando o projeto Windows Forms

Crie um projeto Desktop do tipo Windows Forms  (.NET Framework) com o nome WF_RestTable no VS 2017 Community.

No formulário padrão Form1.cs inclua os seguintes controles a partir da Toolbox:

Disponha os controles conforme o leiaute abaixo:

A seguir via menu Tools inclua uma referência no projeto ao pacote Newtonsoft.Json.

Agora no evento Click do botão de comando inclua o código abaixo no arquivo code-behind Default.aspx.cs

using Newtonsoft.Json;
using System;
using System.Data;
using System.IO;
using System.Net;
using System.Windows.Forms;
namespace WF_RestTable
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void btnAcessar_Click(object sender, EventArgs e)
        {
            string json = (new WebClient()).DownloadString(txtUrl.Text);
            dgvDados.DataSource = JsonConvert.DeserializeObject<DataTable>(json);
        }
    }
}

Neste código estamos usando a classe WebClient e fazendo o download dos dados disponbilizado pela API definida pela Uri informada em txtUrl.

A seguir usando o método DeserializeObject<DataTable> convertemos os dados no formato json para um DataTable e exibimos no controle DataGridView.

Simples assim...

Executando o projeto e acessando as API no endereco https://jsonplaceholder.typicode.com/ iremos obter o resultado abaixo:

Tudo isso com duas linhas de código.

É claro que existem outras formas de obter o mesmo resultado. A seguir vejamos outra abordagem onde definimos um método para obter os dados  usando a classe WebRequest para fazer a requisição para a Uri e obter os dados no formarto JSON deserializando para um DataTable:

        private JArray GetRESTDados(string uri)
        {
            var webRequest = (HttpWebRequest)WebRequest.Create(uri);
            var webResponse = (HttpWebResponse)webRequest.GetResponse();
            var reader = new StreamReader(webResponse.GetResponseStream());
            string s = reader.ReadToEnd();
            return JsonConvert.DeserializeObject<JArray>(s);
        }

 Agora basta chamar o método passando a Uri e retornando o datatable para o DataGridView:

        private void btnAcessar_Click(object sender, EventArgs e)
        {        
            dgvDados.DataSource = GetRESTDados(txtUrl.Text);
        }

 

Pegue o projeto aqui: WF_RestTable.zip (sem as referências)

(disse Jesus)"Aquele que tem os meus mandamentos e os guarda esse é o que me ama; e aquele que me ama será amado de meu Pai, e eu o amarei, e me manifestarei a ele."
João 14:21

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 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti