Serialização e Desserialização XML em Delphi: Convertendo Objetos Delphi para XML e Vice-Versa

Serialização e Desserialização XML em Delphi
XML

Introdução

Neste post trataremos sobre Serialização e Desserialização XML em Delphi.

A serialização e desserialização de objetos são práticas essenciais para desenvolver aplicações que precisem persistir dados ou realizar trocas de informações em formatos padronizados, como XML. O Delphi, sendo uma linguagem robusta, oferece ferramentas para realizar essa tarefa de forma eficaz. Neste artigo, veremos como transformar objetos Delphi em XML e vice-versa, utilizando a classe TXMLDocument.

O que é Serialização e Desserialização?

  • Serialização: Processo de conversão de um objeto em um formato que possa ser armazenado ou transmitido, como XML, JSON, ou binário.
  • Desserialização: Processo inverso, ou seja, converter uma representação de dados serializados de volta para um objeto utilizável.

O formato XML é amplamente utilizado devido à sua legibilidade e suporte em várias plataformas. Em Delphi, podemos usar a classe TXMLDocument para manipular XML, serializando e desserializando objetos complexos de forma eficiente.

Serialização de Objetos em XML

Para serializar um objeto Delphi para XML, o primeiro passo é criar uma estrutura que mapeie as propriedades do objeto para elementos XML. A classe TXMLDocument facilita a criação de um documento XML e a adição de nós, atributos e valores correspondentes aos dados do objeto.

Exemplo de Código

Vamos criar um exemplo simples de serialização de um objeto chamado TPessoa em XML:

type
  TPessoa = class
  public
    Nome: string;
    Idade: Integer;
    Email: string;
  end;

procedure SerializarPessoa(Pessoa: TPessoa; var XMLDoc: IXMLDocument);
var
  RootNode, PessoaNode: IXMLNode;
begin
  // Cria o documento XML
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.Active := True;
  XMLDoc.Version := '1.0';
  XMLDoc.Encoding := 'UTF-8';

  // Cria o nó raiz
  RootNode := XMLDoc.AddChild('Pessoas');

  // Cria o nó para o objeto pessoa
  PessoaNode := RootNode.AddChild('Pessoa');

  // Adiciona os atributos do objeto como nós XML
  PessoaNode.AddChild('Nome').Text := Pessoa.Nome;
  PessoaNode.AddChild('Idade').Text := IntToStr(Pessoa.Idade);
  PessoaNode.AddChild('Email').Text := Pessoa.Email;

  // Salva o XML em um arquivo ou retorna em formato string
  XMLDoc.SaveToFile('Pessoa.xml');
end;

Neste exemplo:

  • Criamos uma instância de TXMLDocument.
  • Adicionamos um nó raiz chamado Pessoas e, dentro dele, criamos o nó Pessoa com os atributos Nome, Idade, e Email derivados das propriedades do objeto TPessoa.
  • O XML gerado seria salvo no arquivo “Pessoa.xml” e teria a seguinte estrutura:
<?xml version="1.0" encoding="UTF-8"?>
<Pessoas>
  <Pessoa>
    <Nome>João</Nome>
    <Idade>30</Idade>
    <Email>joao@example.com</Email>
  </Pessoa>
</Pessoas>

Desserialização de XML para Objetos

Desserializar um XML significa ler o conteúdo do XML e reconstruir o objeto Delphi a partir dele. Isso é útil quando recebemos dados de uma fonte externa em formato XML e queremos utilizá-los diretamente em nossas classes.

Exemplo de Código

Para desserializar o XML gerado acima de volta em um objeto TPessoa, o processo seria o seguinte:

procedure DesserializarPessoa(var Pessoa: TPessoa; XMLDoc: IXMLDocument);
var
  PessoaNode: IXMLNode;
begin
  // Acessa o nó raiz do XML
  PessoaNode := XMLDoc.DocumentElement.ChildNodes['Pessoa'];

  // Atribui os valores XML às propriedades do objeto
  Pessoa.Nome := PessoaNode.ChildValues['Nome'];
  Pessoa.Idade := StrToInt(PessoaNode.ChildValues['Idade']);
  Pessoa.Email := PessoaNode.ChildValues['Email'];
end;

procedure CarregarXML;
var
  Pessoa: TPessoa;
  XMLDoc: IXMLDocument;
begin
  // Cria a instância da pessoa
  Pessoa := TPessoa.Create;

  // Carrega o documento XML
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile('Pessoa.xml');

  // Desserializa o XML para o objeto
  DesserializarPessoa(Pessoa, XMLDoc);

  // Exibe as informações do objeto
  ShowMessage('Nome: ' + Pessoa.Nome);
  ShowMessage('Idade: ' + IntToStr(Pessoa.Idade));
  ShowMessage('Email: ' + Pessoa.Email);

  Pessoa.Free;
end;

Nesse exemplo:

  • O método DesserializarPessoa lê o XML e atribui os valores dos nós correspondentes às propriedades do objeto TPessoa.
  • A função CarregarXML é responsável por carregar o arquivo XML e chamar a desserialização.

Veja abaixo a ilustração do projeto:

Ilustração do projeto.

Código fonte do exemplo

Você pode fazer o download do exemplo do projeto através do repositório do github:

https://github.com/Gisele-de-Melo/Serializacao_Desserializacao_XML

Usando TXMLDocument para Serializar/Desserializar Dados Complexos

A classe TXMLDocument em Delphi é uma ferramenta poderosa para trabalhar com XML. Ela fornece uma interface para manipulação de nós, permitindo tanto a serialização quanto a desserialização de dados de forma simples.

Serialização de Estruturas Complexas

Se o objeto a ser serializado contém outras classes ou listas de objetos, a abordagem será semelhante, mas será necessário percorrer as listas e adicionar nós adicionais ao XML.

Exemplo de uma classe com lista de endereços:

type
  TEndereco = class
    Rua: string;
    Numero: Integer;
  end;

  TPessoa = class
    Nome: string;
    Enderecos: TList<TEndereco>;
  end;

Na serialização, você iteraria sobre a lista Enderecos e adicionaria nós correspondentes:

for Endereco in Pessoa.Enderecos do
begin
  EnderecoNode := PessoaNode.AddChild('Endereco');
  EnderecoNode.AddChild('Rua').Text := Endereco.Rua;
  EnderecoNode.AddChild('Numero').Text := IntToStr(Endereco.Numero);
end;

A desserialização seguiria a mesma lógica, lendo os nós correspondentes e populando a lista de endereços do objeto.

Acredito que com essa dica você pode fazer seu próprio projeto, serializando e desserializando XML utilizando classes como estrutura. Coloque a mão na massa, quanto mais você codifica, mais o seu cérebro assimila tudo que você leu.

Conclusão

A serialização e desserialização de objetos em XML no Delphi são práticas essenciais para manipular dados de forma estruturada e interoperável. Utilizando a classe TXMLDocument, é possível criar documentos XML a partir de objetos Delphi e, em seguida, reconstruí-los a partir do XML. A aplicação dessa técnica facilita a persistência e o intercâmbio de dados entre sistemas, promovendo maior flexibilidade e integração com outros serviços.

O Delphi oferece grande flexibilidade com o TXMLDocument, permitindo trabalhar com dados complexos e garantindo que as trocas de informações sejam realizadas de forma eficiente e organizada.

Posts Relacionados


Livros + e-books

Delphi para Android e iOS

codedelphi.com
codedelphi.com

Delphi Start

codedelphi.com

Programando em Delphi XE

Aprenda programar Delphi

Banco de Dados RAD Delphi

Delphi Programming Projects

Deixe um comentário