A Microsoft percebeu a importância dos dados serializados, por isso incluiu o namespace System.Runtime.Serialization e System.Xml.Serialization na estrutura .NET para fornecer funções de serialização e fornecer aos usuários a capacidade de escrever seus próprios métodos de serialização. . O namespace System.Xml.Serialization fornece métodos básicos para serializar um objeto no formato XML. Vamos dar uma olhada em como usar esse método.
O encanto do XML
XML serializado refere-se ao processo de salvar os campos públicos e atributos de um objeto em um formato serial (aqui, formato XML) para conveniência de armazenamento ou transmissão. A desserialização é o processo de usar informações de estado serial para restaurar um objeto de seu estado XML serial para seu estado original. Portanto, você pode pensar na serialização como um método para salvar o estado de um objeto em um fluxo ou buffer.
O objetivo da serialização é o armazenamento e a conversão de dados. O armazenamento de dados refere-se ao salvamento de dados nas sessões do usuário. Quando o aplicativo é fechado, os dados são salvos (serializados) e quando o usuário volta, os dados são recarregados (desserializados). A conversão de dados refere-se à transformação de dados em um formato que possa ser compreendido por outro sistema. Usando serialização e XML, a conversão de dados pode ser realizada facilmente.
Os dados no objeto podem ser uma classe, método, propriedade, tipo privado, matriz ou até mesmo XML incorporado em um objeto System.Xml.XmlElement ou System.Xml.XmlAttribute.
A classe chave no namespace System.Xml.Serialization é XmlSerializer. É claro que esse namespace também inclui outras classes relacionadas a outros aspectos de XML e SOAP, mas nosso foco está na classe XmlSerializer.
XMLSerializador
A classe XmlSerializer fornece métodos para serializar objetos em arquivos XML e desserializar documentos XML em objetos. Também permite que os usuários especifiquem como os objetos são convertidos em XML. Você pode passar o tipo de objeto a ser serializado como parâmetro para o construtor da classe. O código C# a seguir ilustra o uso do construtor.
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
O seguinte é o código VB.NET equivalente:
Dim ser As New XmlSerializer(GetType(objectToSerialize))
O processo de serialização real é implementado no método Serialize da classe XmlSerializer. Este método permite chamar objetos TextWriter, Stream e XmlWriter durante a serialização. O código de exemplo a seguir ilustra como chamar esse método. Neste exemplo, um objeto é serializado e salvo em um arquivo no disco local. O exemplo começa com a declaração da classe, seguida pelo código-fonte serializado.
usando o sistema;
namespace BuilderSerialization {
Endereço da classe pública {
Endereço público() {}
string pública Endereço1;
string pública Endereço2;
cadeia pública Cidade;
estado da string pública;
string pública Zip;
string pública País;
} }
usando o sistema;
namespace BuilderSerialization {
classe pública Autor {
Autor público() { }
string pública Nome;
string pública MiddleName;
string pública Sobrenome;
string pública Título;
string pública Gênero;
endereço público AddressObject;
} }
namespace BuilderSerialization {
livro de classe pública {
livro público() { }
string pública Título;
Autor público AutorObject;
cadeia pública ISBN;
público duplo RetailPrice;
Publicador de string pública;
}}
usando o sistema;
usando System.Xml.Serialization;
usando System.IO;
namespace BuilderSerialization {
classTestClass{
static void Principal(string[] args) {
Livro LivroObject = new Livro();
XmlSerializer ser = new XmlSerializer(typeof(Livro));
Escritor TextWriter = new StreamWriter("booktest.xml");
BookObject.Title = "LotusScript prático";
BookObject.ISBN = "1884777767";
BookObject.Publisher = "Manning Publicações";
BookObject.RetailPrice = 43,95;
BookObject.AuthorObject = new Autor();
BookObject.AuthorObject.FirstName = "Tony";
BookObject.AuthorObject.LastName = "Patton";
BookObject.AuthorObject.Gender = "Masculino";
BookObject.AuthorObject.AddressObject = novo Endereço();
BookObject.AuthorObject.AddressObject.Address1 = "1 rua principal";
BookObject.AuthorObject.AddressObject.City = "Em qualquer lugar";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject.Country = "EUA";
ser.Serialize(escritor, BookObject);
escritor.Fechar();
} } }
O código acima transforma três objetos em um objeto, gerando assim um arquivo XML durante o processo de serialização. A seguir está o documento XML gerado pelo programa de exemplo:
<?xml version="1.0" encoding="utf-8"?>
<Livro xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
<Title>LotusScript prático</Title>
<AutorObject>
<Nome>Tony</Nome>
<Sobrenome>Patton</Sobrenome>
<Gênero>Masculino</Gênero>
<AddressObject>
<Address1>1 rua principal</Address1>
<Cidade>Em qualquer lugar</Cidade>
<Estado>KY</Estado>
<Zip>40.000</Zip>
<País>EUA</País>
</AddressObject>
</AuthorObject>
<ISBN>1884777767</ISBN>
<RetailPrice>43,95</RetailPrice>
<Publisher>Manning Publicações</Publisher>
</Book>
Observe que o processo de serialização também pode lidar com o aninhamento de dados de objetos. Os dados são convertidos em um formato reconhecível, o que facilita o recarregamento (desserialização) dos dados e a transferência de dados para outro sistema. Durante o processo de transferência de dados, o sistema receptor precisa saber o formato do arquivo XML (caso não saiba antecipadamente). Portanto, um arquivo de esquema XML precisa ser fornecido. A ferramenta XSD.exe no .NET Framework pode gerar um arquivo de esquema para XML serializado.
A seguir está um exemplo de código escrito em VB.NET:
Public Class Address
Endereço público1 como string
Endereço público2 como string
Cidade pública como string
Estado público como string
Zip público como string
País público como string
Fim da aula
Autor de aula pública
Nome público como string
MiddleName público como string
Sobrenome público como string
Título público como string
Gênero público como string
Endereço públicoObject como endereço
Fim da aula
Livro de aula pública
Autor PúblicoObject como autor
Título público como string
ISBN público como string
Preço de varejo público como o dobro
Editor público como string
Fim da aula
Importa System.Xml.Serialization
ImportaçõesSystem.IO
Módulo Módulo1
Subprincipal()
Dim BookObject como novo livro
Dim ser como novo XmlSerializer(GetType(Book))
Dim escritor como novo StreamWriter("booktest.xml")
Com BookObject
.Title = "LotusScript prático"
.ISBN = "1884777767"
.Publisher = "Manning Publicações"
.RetailPrice = 43,95
.AuthorObject = Novo Autor
.AuthorObject.FirstName = "Tony"
.AuthorObject.LastName = "Patton"
.AuthorObject.Gender = "Masculino"
.AuthorObject.AddressObject = Novo endereço
.AuthorObject.AddressObject.Address1 = "1 rua principal"
.AuthorObject.AddressObject.City = "Em qualquer lugar"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject.Country = "EUA"
Terminar com
ser.Serialize(escritor, BookObject)
escritor.Fechar()
Finalizar sub
Saída de controle
do módulo final
O processo de serialização gera arquivos XML padrão e os membros de dados são convertidos em elementos XML. Entretanto, nem todos os membros de dados se tornam elementos. Você pode controlar o arquivo XML de saída adicionando algumas tags no código da classe. Dessa forma, os membros dos dados podem ser convertidos em atributos XML em vez de elementos, ou simplesmente ignorados. O exemplo a seguir é um código VB.NET de classe de livro modificado.
Livro de aula pública
Autor PúblicoObject como autor
Título público como string
<System.Xml.Serialization.XmlAttribute()> _
ISBN público como string
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Preço de varejo público como o dobro
Editor público como string
End Class
Este código informa ao sistema para usar o membro da classe ISBN como um atributo XML ao gerar o arquivo XML e ignorar o membro RetailPrice. Essa alteração pode ser vista no arquivo XML gerado:
<?xml version="1.0" encoding="utf-8"?>
<Livro xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " ISBN="1884777767 ">
<AutorObject>
<Nome>Tony</Nome>
<Sobrenome>Patton</Sobrenome>
<Gênero>Masculino</Gênero>
<AddressObject>
<Address1>1 rua principal</Address1>
<Cidade>Em qualquer lugar</Cidade>
<Estado>KY</Estado>
<Zip>40.000</Zip>
<País>EUA</País>
</AddressObject>
</AuthorObject>
<Title>LotusScript prático</Title>
<Publisher>Manning Publicações</Publisher>
</Book>
A seguir está o código C# correspondente:
public class Book {
livro público() { }
string pública Título;
Autor público AutorObject;
[System.Xml.Serialization.XmlAttribute()]
cadeia pública ISBN;
[System.Xml.Serialization.XmlIgnoreAttribute()]
público duplo RetailPrice;
Publicador de string pública;
}
O texto acima menciona apenas brevemente dois símbolos de marcação. Consulte a documentação do .NET para obter a notação de marcação completa.
A desserialização de dados desserializados pode ser facilmente alcançada chamando o método Deserialize da classe XmlSerializer. O seguinte fragmento de programa VB.NET completa a desserialização do documento XML mencionado acima:
Dim BookObject As New Book
Dim ser como novo XmlSerializer(GetType(Book))
Dim fs como novo System.IO.FileStream("booktest.xml", FileMode.Open)
Dim leitor como novo System.XML.XmlTextReader(fs)
BookObject = CType(ser.Deserialize(reader), Book)
Este programa coloca os dados resultantes na memória para uso posterior. Aqui está o código C# equivalente:
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = novo System.IO.FileStream("booktest.xml",
ArquivoMode.Open);
Leitor System.Xml.XmlTextReader = novo System.Xml.XmlTextReader(fs);
Livro BookObject = (Livro)(ser.Deserialize(leitor));
-------------------------------------------------- -
Sobre o autor: Tony Patton é um desenvolvedor de aplicativos profissional com amplo conhecimento e certificado em Java, VB, Lotus e XML.