
Índice
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 atributosNome
,Idade
, eEmail
derivados das propriedades do objetoTPessoa
. - 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 objetoTPessoa
. - A função
CarregarXML
é responsável por carregar o arquivo XML e chamar a desserialização.
Veja abaixo a 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
Delphi para Android e iOS
Delphi Start
Programando em Delphi XE
Aprenda programar Delphi
Banco de Dados RAD Delphi
Delphi Programming Projects