C# - Convertendo um DataTable para JSON
O JavaScript
Object Notation (ou JSON) é 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. Obs: Assim como XML, JSON também pode ser visto uma alternativa ao modelo de dados relacional mais apropriadamente a dados semiestruturados. |
Mas o que JSON tem a ver com a plataforma .NET, com VB .NET, C# e ASP .NET ?
Tudo !!
Quando você cria uma aplicação que irá se comunicar com outra aplicação, quer seja ela local ou remota, você esta trocando informações e neste caso um formato de dados e um protocolo de troca deve ser selecionado para que a comunicação seja feita com sucesso. Por sucesso entende-se que quem recebe a informação consegue tratá-la e entender o seu significado.
Existem uma variedade de opções de protocolos abertos padronizados, tais como SOAP, XML, etc., que podem ser adotados e isso vai depender da finalidade e dos requisitos da sua aplicação.
Dessa forma, JSON é um protocolo leve para intercâmbio de dados e está baseado em um subconjunto da linguagem de programação JavaScript, sendo independente desta e de qualquer linguagem.
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" ];
var
escola =
{
"alunos":
[ { "nome":"Jose Carlos" ,
"sobrenome":"Macoratti" }, {
"nome":"Ana" ,
"sobrenome":"Lima" }, {
"nome":"Pedro" ,
"sobrenome":"Ramos" } ]
}
Neste artigo vou mostrar uma forma bem simples de converter um DataTable para o formato JSON usando a linguagem C# e também a VB .NET.
Recursos usados
Criando o projeto no VIsual Studio 2013
Abra o Visual Studio 2013 Express for web e clique em New Project;
Selecione a linguagem de sua preferência e clique em Web;
Informe o nome DataTable_Json;
No formulário form1.cs inclua a partir da ToolBox um controle Button name=btnConverter e um controle TextBox Multiline=true e name=txtJSON
Defina o leiaute conforme a figura abaixo:
Agora no menu PROJECT clique em Add Class e informe o nome Suporte.cs.
A seguir digite o código abaixo neste arquivo:
public string converteDataTabelParaJSON(DataTable dtb)
{
try
{
//define um array de strings
string[] jsonArray = new string[dtb.Columns.Count];
string headString = string.Empty;
//percorre as colunas
for (int i = 0; i < dtb.Columns.Count; i++)
{
jsonArray[i] = dtb.Columns[i].Caption; // Array para todas as colunas
headString += "'" + jsonArray[i] + "' : '" + jsonArray[i] + i.ToString() + "%" + "',";
}
headString = headString.Substring(0, headString.Length - 1);
//define um stringbuilder
StringBuilder sb = new StringBuilder();
sb.Append("[");
if (dtb.Rows.Count > 0)
{
for (int i = 0; i < dtb.Rows.Count; i++)
{
string tempString = headString;
sb.Append("{");
// pega cada valor do datatable
for (int j = 0; j < dtb.Columns.Count; j++)
{
tempString = tempString.Replace(dtb.Columns[j] + j.ToString() + "%", dtb.Rows[i][j].ToString());
}
sb.Append(tempString + "},");
}
}
else
{
string tempString = headString;
sb.Append("{");
for (int j = 0; j < dtb.Columns.Count; j++)
{
tempString = tempString.Replace(dtb.Columns[j] + j.ToString() + "%", "-");
}
sb.Append(tempString + "},");
}
sb = new StringBuilder(sb.ToString().Substring(0, sb.ToString().Length - 1));
sb.Append("]");
return sb.ToString(); // saida json formatada
}
catch (Exception ex)
{
throw ex;
}
}
|
Definimos o método converteDataTabelParaJSON(DataTable dtb) que recebe um DataTable e gera uma string com o formato JSON.
A versão para a linguagem VB .NET é dada a seguir:
Public Function converteDataTabelParaJSON(dtb As DataTable) As String
Try
'define um array de strings
Dim jsonArray As String() = New String(dtb.Columns.Count - 1) {}
Dim headString As String = String.Empty
'percorre as colunas
For i As Integer = 0 To dtb.Columns.Count - 1
jsonArray(i) = dtb.Columns(i).Caption
' Array para todas as colunas
headString += "'" + jsonArray(i) + "' : '" + jsonArray(i) + i.ToString() + "%" + "',"
Next
headString = headString.Substring(0, headString.Length - 1)
'define um stringbuilder
Dim sb As New StringBuilder()
sb.Append("[")
If dtb.Rows.Count > 0 Then
For i As Integer = 0 To dtb.Rows.Count - 1
Dim tempString As String = headString
sb.Append("{")
' pega cada valor do datatable
For j As Integer = 0 To dtb.Columns.Count - 1
tempString = tempString.Replace(dtb.Columns(j).ToString() + j.ToString() & "%", dtb.Rows(i)(j).ToString())
Next
sb.Append(tempString & Convert.ToString("},"))
Next
Else
Dim tempString As String = headString
sb.Append("{")
For j As Integer = 0 To dtb.Columns.Count - 1
tempString = tempString.Replace(dtb.Columns(j).ToString() + j.ToString() + "%", "-")
Next
sb.Append(tempString & Convert.ToString("},"))
End If
sb = New StringBuilder(sb.ToString().Substring(0, sb.ToString().Length - 1))
sb.Append("]")
' saida json formatada
Return sb.ToString()
Catch ex As Exception
Throw ex
End Try
End Function
|
Para testar vamos definir o código abaixo no evento Click do botão de comando - Criar o DataTable e Converter para JSON -:
Versão C# |
Versão VB .NET |
private void button1_Click(object sender, EventArgs e)
{
try
{
DataTable dtbContatos = new DataTable();
//define a estrutura da
dtbContatos.Columns.Add("Id", typeof(int));
dtbContatos.Columns.Add("Nome", typeof(string));
dtbContatos.Columns.Add("Idade", typeof(string));
//preenche o datatable
dtbContatos.Rows.Add(25, "Macoratti", "30");
dtbContatos.Rows.Add(50, "Fabiana", "25");
dtbContatos.Rows.Add(10, "Marcia", "19");
dtbContatos.Rows.Add(21, "Janice", "22");
//cria uma instância da classe Suporte
Suporte sp = new Suporte();
//chama o método para converter o datatable para JSON
txtJSON.Text = sp.converteDataTabelParaJSON(dtbContatos);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim dtbContatos As New DataTable()
'define a estrutura do datatable
dtbContatos.Columns.Add("Id", GetType(Integer))
dtbContatos.Columns.Add("Nome", GetType(String))
dtbContatos.Columns.Add("Idade", GetType(String))
'preenche o datatable
dtbContatos.Rows.Add(25, "Macoratti", "30")
dtbContatos.Rows.Add(50, "Fabiana", "25")
dtbContatos.Rows.Add(10, "Marcia", "19")
dtbContatos.Rows.Add(21, "Janice", "22")
'cria uma instância da classe Suporte
Dim sp As New Suporte()
'chama o método para converter o datatable para JSON
txtJSON.Text = sp.converteDataTabelParaJSON(dtbContatos)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
Este código cria um DataTable bem simples com 3 colunas e inclui 4 registros chamado dtbContatos.
Para realizar a conversão criamos uma instância da classe Suporte e a partir do objeto sp chamamos o método para realizar a conversão :
sp.converteDataTabelParaJSON(dtbContatos);
O Resultado pode ser visto a seguir:
Pegue o projeto completo aqui : DataTable_Json.zip
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 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#