Construção do método de Desserialização: Criação de uma Ferramenta de Serialização/Desserialização Genérica – Parte 3

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja neste artigo como criar uma ferramenta genérica de Serialização e Desserialização

Olá a todos.

No artigo anterior, criamos o método de serialização e vimos um pouco de teoria a respeito de Type Parameters..

Agora iniciaremos a codificação do método de desserialização, ou seja, o método que transforma um XML em um objeto.

O método receberá uma string XML e criará um objeto à partir dela. Ele, assim como o método de serialização, utilizará um XmlSerializer, que é um objeto que encapsula funcionalidades de serialização e deserialização. Porém o resultado dessa desserialização do XmlSerializer é um objeto do tipo “object”, ou seja, não é um tipo definido. Mas como estamos utilizando uma classe genérica, que recebe um Type Parameter, podemos fazer com que esse método retorne um tipo definido – T.

public T GenDeserializer(string pXML)
        {
            UTF8Encoding encoding = null;
            XmlDocument xmlDoc = null;
            MemoryStream ms1 = null;
            XmlSerializer customSerializer = null;
            T Obj = default(T);
            try
            {
                xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(pXML);

                encoding = new UTF8Encoding();
                using (ms1 = new MemoryStream(encoding.GetBytes(xmlDoc.InnerXml)))
                {
                    ms1.Position = 0;
                    customSerializer = new XmlSerializer(typeof(T));
                    Obj = (T)customSerializer.Deserialize(ms1);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                encoding = null;
                xmlDoc = null;
                ms1 = null;
                customSerializer = null;
            }
            return Obj;
        }



O método recebe uma string representando um XML e carrega um  XmlDocument na memória de acordo com a string recebida. Uma vez carregado o XmlDocument, o transformamos em bytes utilizando um MemoryStream. Com o MemoryStream, podemos chamar o método de desserialização. Como dissemos o método de desserialização do XmlSerializer, retorna um object, portanto precisamos fazer um parse para converter esse object para o tipo que queremos – T.

É isso, terminamos a codificação de nossa classe genérica para Serialização e Desserialização de objetos. Vamos passar agora para os testes de nossa ferramenta.

No projeto TestProject que é um Console Application (ver parte 1 deste artigo), vamos codificar a classe Program.cs, que já criada por default.

Primeiramente adicione ao TestProject uma referência ao projeto Utils. Dentro do método “main” vamos instanciar um objeto do tipo Cliente (ver parte 1) e preencher suas propriedades.

  static void Main(string[] args)
        {
            Cliente cliente = new Cliente();
            cliente.Id = 10;
            cliente.NomeCompleto = "Cliente Teste";
            cliente.Cpf = 500986026;            
cliente.Email = "emailcliente@cliente.com";
            cliente.Senha = "senha123";

        }



Agora vamos criar uma instância da classe GenericSerializer. Lembrando que ao instanciar devemos passar um tipo como Type Parameter. Como vamos trabalhar com a classe Cliente, conseqüentemente esse tipo será “Cliente”.

GenericSerializer customSer = new     GenericSerializer();


Agora vamos testar o método de serialização. Instancie uma string de nome “xml” que receberá o resultado da serialização.


string xml = customSer.GenSerializer(cliente);


O leitor vai reparar que em tempo de design o intelisense do Visual Studio indica o tipo de objeto esperado pelo método “GenSerializer”, devido ao fato de na instanciação da classe “GenericSerializer” definimos que o Type Parameter será do tipo Cliente.



Agora vamos colocar na tela o conteúdo da serialização e testar o método de desserialização.

Console.WriteLine(xml);
Console.ReadKey();
Console.Clear();
Cliente clienteX = customSer.GenDeserializer(xml);
Console.WriteLine(clienteX.NomeCompleto + " " + clienteX.Id);
Console.ReadKey();

Vamos agora rodar o programa e verificar na tela o resultado:

Ilustração 1 - Resultado da serialização

Como podemos ver, a serialização foi concluída com sucesso, sendo que a string XML foi gerada corretamente. A estrutura do xml é a seguinte:



10
Cliente  Teste
500986026
emailcliente@cliente.com
senha123




Ilustração 2 - Resultado da Desserialização



Vemos também que o sistema realizou a desserialização corretamente exibindo a propriedade NomeCompleto, do objeto clienteX corretamente. Seria Interessante o leitor debugar a aplicação de teste e verificar o valor da string “xml” e do objeto “clienteX”, para verificar o correto funcionamento de nossa ferramenta.


Para o leitor que queira se aprofundar um pouco mais sobre o objeto XmlSerializer, deixo uma dica. Deem uma olhada nos atributos contidos no Namespace “System.Xml.Serialization”.

Com isso chegamos ao final do artigo.

Os arquivos fonte este disponíveis neste post para Download.

 

Espero que tenha sido útil. Obrigado.



 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?