C# - Converter de JSON para Object e vice-versa


 Neste artigo vou mostrar como converter JSON para Object e vice-versa usando a linguagem C#.

Java Script Object Notation - JSON, é um formato para troca de dados baseado em texto aberto descrito na RCF 4627. Da mesma forma que o XML, ele é legível, independente da plataforma e possui amplas possibilidades de implementações. Os dados formatados de acordo com o padrão JSON são leves e podem se analisados por implementações JavaScript com grande facilidade tornando assim um formato de troca de dados ideal para aplicações Ajax.

Como JSON é basicamente um formato de dados, ele não esta limitado a aplicações web usando Ajax e pode ser utilizado praticamente em qualquer cenário onde as aplicações precisam trocar ou armazenar informações no formato texto.

Existem frameworks como JSON.NET que podemos usar para realizar tarefas com JSON, como por exemplo converter um objeto para JSON. Você pode usá-lo em seu projeto via Nuget ou baixando o pacote neste link : http://www.newtonsoft.com/json

Neste artigo eu vou mostrar como podemos converter de JSON para Object e vice versa via código C# sem usar a JSON.NET ou qualquer outra biblioteca.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no VS Community

Abra o VS Community 2015 e clique em New Project;

Selecione a linguagem Visual C# e o template Windows Forms Application;

Informe o nome Converte_Object_Json e clique no botão OK;

A seguir no formulário padrão form1.cs inclua os seguintes controles :

Inclua uma referência no projeto ao namespace System.Runtime.Serialization;

No menu Project clique em Add Class e informe o nome JsonConversao.cs e digite o código abaixo nesta classe :

using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
namespace Converte_Object_Json
{
    public class JsonConversao
    {
        public string ConverteObjectParaJSon<T>(T obj)
        {
            try
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, obj);
                string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return jsonString;
            }
            catch
            {
                throw;
            }
        }
        public T ConverteJSonParaObject<T>(string jsonString)
        {
            try
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
                T obj = (T)serializer.ReadObject(ms);
                return obj;
            }
            catch
            {
                throw;
            }
        }
    }
}

A classe acima possui o método para converter de json para object e de object para json.

Vamos Testar.

Crie uma pasta chamada Teste no projeto via opção do menu Project clicando em New Folder.

A seguir crie duas classes (via opção Menu Project -> Add Class):

Abaixo temos o código dessas classes:

    public class Produto
    {
        public Int32 ProdutoID { get; set; }
        public String ProdutoNome { get; set; }
        public String Categoria { get; set; }
        public Double Preco { get; set; }
    }

 

    public class Aluno
    {
        public String Nome { get; set; }
        public String Sobrenome { get; set; }
    }

 

Produto Aluno

Agora vamos ao código...

No evento Click do botão Converte Object para JSON - defina o código 

        private void btnObjectJson_Click(object sender, EventArgs e)
        {
            //cria objeto com valores
            Produto produto = new Produto
            {
                ProdutoID = 1001,
                ProdutoNome = "Samsung Galaxy III",
                Categoria = "Celular",
                Preco = 699.00
            };
            //lista de objetos
            List<Produto> produtos = new List<Produto>
            {
                new Produto(){ ProdutoID = 1002, ProdutoNome= "IPhone", Categoria="Celular",  Preco=1999.00 },
                new Produto(){ ProdutoID = 1003, ProdutoNome= "IPad Apple", Categoria="Tablet",  Preco=2999.00 },
                new Produto(){ ProdutoID = 1004, ProdutoNome= "SamSung Galaxy 5S", Categoria="Celular",  Preco=2599.00 }
            };
            //converte para string e exibe no textBox
            JsonConversao jsonconv = new JsonConversao();
            txtResultado.Text = jsonconv.ConverteObjectParaJSon(produto);

            //descomente a linha abaixo para exibir a lista de produtos 
            //txtResultado.Text = txtResultado.Text +  jsonconv.ConverteObjectParaJSon(produtos);
        }

Criamos um novo objeto Produto e a seguir usamos o método ConverteObjectParaJSon() para fazer a conversão para JSON.

Nota: O código comentado mostra que podemos converter também uma lista de objetos.

private void btnJsonObject_Click(object sender, EventArgs e)
 {
            JsonConversao jsonconv = new JsonConversao();
            //lista de objetos
            List<Aluno> alunos = new List<Aluno>
            {
                new Aluno(){ Nome = "Jose Carlos", Sobrenome="Macoratti" },
                new Aluno(){ Nome = "Paulo", Sobrenome="Silveira" }
            };

             //Converte de objeto para string de depois para object
            string strAlunos = jsonconv.ConverteObjectParaJSon<List<Aluno>>(alunos);
            alunos = jsonconv.ConverteJSonParaObject<List<Aluno>>(strAlunos);

           //percorre a lista de objetos e exibe no TexBox
            foreach (var aluno in alunos)
            {
                txtResultado2.Text += aluno.Nome + " " + aluno.Sobrenome + Environment.NewLine;
            }
  }

Neste código convertemos o JSON para objeto.

Abaixo temos o resultado obtido:

Pegue o projeto completo aqui : Converte_Object_Json.zip

Meus filhinhos, não amemos de palavra, nem de língua, mas por obra e em verdade.
E nisto conhecemos que somos da verdade, e diante dele asseguraremos nossos corações;
Sabendo que, se o nosso coração nos condena, maior é Deus do que o nosso coração, e conhece todas as coisas.

1 João 3:18-20

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