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#