C#  - Usando Reflection na prática - II


 Neste artigo vou mostrar uma aplicação prática da utilização de Reflection : Serializando objetos no formato JSON.

Estou continuando a primeira parte do artigo e vou mostrar outra aplicação prática do uso de Reflection para otimizar o código.
 
 
Neste artigo vamos aplicar Reflection para realizar a serialização de um objeto para o formato JSON.

Recursos usados:

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

Criando a solução no VS 2015 Community

Abra o Visual Studio Community 2015 e clique em New Project;

Selecione Visual C# -> Console Application

Informe o nome Reflection_Serializacao e clique no botão OK.

Criando as classes

Vamos criar as classes Cliente, Produto e Pedido via menu Project Add Class.

A seguir temos o código de cada classe :

1- Cliente

    public class Cliente
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Endereco { get; set; }
    }

2- Produto

    public class Produto
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public decimal Preco { get; set; }
        public int Estoque { get; set; }
        public DateTime Entrada { get; set; }
        public DateTime? Saida { get; set; }
        public DateTime Validade { get; set; }
        public bool Ativo { get; set; }
    }

3- Pedido

    public class Pedido
    {
        public int Id { get; set; }
        public int ClienteId { get; set; }
        public DateTime DataPedido { get; set; }
    }

Criando o método para serializar objetos para o formato JSON

Agora vamos fazer uma implementação de um método chamado SerializarObjetoParaJson que irá receber um objeto e vai serializar este objeto para o formato JSON.

Esse método poderia ter sido incluído em uma classe com métodos definidos para desserializar mas para ficar mais claro vou implementar o método no arquivo Program.cs:

       public static string SerializarObjetoParaJson(object obj)
        {
            var valorSerializado = "";

            //Vamos obter agora todas as propriedades do tipo
            //Usamos o método GetProperties para obter
            //o nome das propriedades do tipo

            foreach (var prop in obj.GetType().GetProperties())
            {
                //Usamos o método GetValue() para obter o valor da instância desse tipo
                var valor = prop.GetValue(obj);

                //agora verificamos o tipo de cada propriedade
                //para realizar a formatação adequada

                if (prop.PropertyType == typeof(DateTime))
                {
                    valorSerializado += "\"" + prop.Name + "\":" + "\"" + String.Format("{0:dd/MM/yyyy}", valor) + "\",";
                }
                else if (prop.PropertyType == typeof(Decimal) || prop.PropertyType == typeof(Double))
                {
                    valorSerializado += "\"" + prop.Name + "\":" + "\"" + String.Format("{0:N}", valor) + "\",";
                }
                else
                {
                    valorSerializado += "\"" + prop.Name + "\":" + "\"" + valor + "\",";
                }
            }

            valorSerializado = valorSerializado.Substring(1, valorSerializado.Length - 2);

            //retorna o objeto serializado
            return "{\"" + valorSerializado + "}";
        }

Criamos assim um método genérico para realizar a serialização de objeto para JSON.

Testando a serialização

Agora vamos mostrar que o código esta funcional implementando o código que cria instâncias das classes e usa a serialização com Reflection.

Abra o arquivo Program e inclua o código a seguir no método Main() :

       static void Main(string[] args)
        {
            var cliente = new Cliente()
            {
                Id = 10,
                Nome = "Macoratti",
                Endereco = "Rua Projetada, 100"
            };

            var pedido = new Pedido()
            {
                Id = 1,
                ClienteId = 1,
                DataPedido = DateTime.Now
            };

            var produto = new Produto
            {
                Id = 1,
                Nome = "Caderno",
                Preco = 3.99M,
                Estoque = 35,
                Entrada = DateTime.Now,
                Saida = null,
                Validade = DateTime.Now.AddDays(720),
                Ativo = true
            };

            var resultado1 = SerializarObjetoParaJson(cliente);
            var resultado2 = SerializarObjetoParaJson(pedido);
            var resultado3 = SerializarObjetoParaJson(produto);

            Console.WriteLine(resultado1);
            Console.WriteLine("\n");
            Console.WriteLine(resultado2);
            Console.WriteLine("\n");
            Console.WriteLine(resultado3);
            Console.ReadKey();
        }

 

Executando o projeto teremos o seguinte resultado :

Podemos verificar se o resultado possui o formato JSON correto realizando a validação no site : http://jsonlint.com/

Basta copiar o resultado gerado, colar no site e clicar no botão Validate JSON para obter o resultado:

Pegue o projeto completo aqui:  Reflection_Serializacao.zip

Ninguém pode servir a dois senhores; porque ou há de odiar um e amar o outro, ou se dedicará a um e desprezará o outro. Não podeis servir a Deus e a Mamom.
Mateus 6:24

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 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti