Já ouviu falar em serialização? Se você já precisou enviar um objeto por uma rede, ou gravar em disco, então você já deve ter utilizado esse recurso. Serializar um objeto é o mesmo que transformar um objeto em bytes.
Dessa forma podemos transformar um objeto em um arquivo, salvar em um banco de dados ou até mesmo transferir por uma rede, preservando o seu estado e sua estrutura original, podendo recuperá-lo em qualquer instante.
Essa técnica é bastante utilizada em sistemas distribuídos e persistência de objetos. Neste artigo mostraremos como tornar um objeto serializável e como utilizar esse recurso.
Serialização em disco
Muitas vezes estamos desenvolvendo uma aplicação e precisamos guardar o estado de um objeto, seja para armazenamento temporário ou definitivo, para que isso seja possível precisamos tornar o objeto serializável.
Vamos criar um pequeno exemplo de serialização de objeto. Criaremos um novo projeto (Windows Application com a linguagem VB) que chamaremos de SerializacaoObjeto (Figura 1).

Vamos criar agora a classe serializável, para tanto, adicione uma classe ao projeto e atribua o nome de ObjetoPessoa.vb (Figura 2). O código da classe será o presente na Listagem 1.

Public Class ObjetoPessoa
Public nome As String
Public sexo As Char
_
Public senha As String
End Class
Estamos apenas criando atributos para armazenar valores. Observe a tag antes da definição da classe. Ela indica que a classe é serializável, ou seja, pode ser transformada em uma sequência de bytes.
Podemos informar também que um determinado atributo do objeto não será serializado. Basta colocar a tag antes de sua definição. Foi o que fizemos com o atributo senha.
Abra o formulário do projeto, nele vamos colocar alguns controles. Adicione um TextBox chamado txtNome, outro TextBox chamado txtSenha e um ComboBox chamado cboSexo. Adicione também Labels para cada controle.
Vamos colocar também dois RadioButtons para informar se a serialização do objeto será em arquivo do tipo binário ou XML. Acrescentamos agora dois botões para as ações de “Serializar” e “Deserializar”. No final desse passo teremos uma tela semelhante à Figura 3.

Vamos agora para o código, clique no formulário e pressione F7. Crie um método chamado serializarObjetoXML que recebe um objeto do tipo ObjetoPessoa, conforme a Listagem 2.
Private Sub serializarObjetoXML( _
ByVal objetoPessoa As ObjetoPessoa)
'informa o formato que será serializado
Dim arquivoSerializado _
As Xml.Serialization.XmlSerializer = _
New Xml.Serialization.XmlSerializer( _
GetType(ObjetoPessoa))
'informa o arquivo que será criado
'serializando o objeto
Dim escreverArquivo As IO.StreamWriter = _
New IO.StreamWriter("C:\Pessoa.xml")
arquivoSerializado.Serialize(escreverArquivo, _
objetoPessoa)
escreverArquivo.Close()
End Sub
Esse método será responsável por transformar o objeto recebido em um arquivo XML em disco. Os códigos aqui demonstrados estão bem comentados, para facilitar o entendimento.
Vamos criar também um método chamado serializarObjetoBinario que recebe um objeto do tipo ObjetoPessoa, conforme a Listagem 3.
Imports System.Runtime.Serialization.Formatters.Binary
...
Private Sub serializarObjetoBin( _
ByVal objetoPessoa As ObjetoPessoa)
'informa o formato que será serializado
Dim Serializer As New BinaryFormatter()
'informa o arquivo que será criado
'serializando o objeto
Dim escreverArquivo As New IO.FileStream( _
"C:\pessoa.bin", IO.FileMode.Create, _
IO.FileAccess.Write, IO.FileShare.None)
Serializer.Serialize(escreverArquivo, _
objetoPessoa)
escreverArquivo.Close()
End Sub
Agora vamos criar o evento do botão Serializar que cria o objeto, preenche o mesmo e chama o método de serialização apropriado, conforme a Listagem 4.
Private Sub Button1_Click(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
'cria o objeto que será serializado
Dim objetoPessoa As New ObjetoPessoa
'preenche os atributos para serializar
objetoPessoa.nome = txtNome.Text
objetoPessoa.sexo = cboSexo.Text
objetoPessoa.senha = txtSenha.Text
'chama o método de serialização passando
'Pessoa preenchido
If rdbXml.Checked Then
'verifica que RadioButton está selecionado e
'chama a função de serialização apropriada
Me.serializarObjetoXML(objetoPessoa)
ElseIf rdbBinario.Checked Then
Me.serializarObjetoBin(objetoPessoa)
End If
End Sub
Agora só falta criar os métodos de deserialização e carregar os campos com os valores. Vamos criar os métodos deserializarObjetoXML e deserializarObjetoBin, conforme a Listagem 5.
Imports System.IO
...
Private Function deserializarObjetoXML() _
As ObjetoPessoa
'cria o objeto de deserialização informando o
'tipo que ele vai deserializar
Dim Deserializer As _
New Xml.Serialization.XmlSerializer( _
GetType(ObjetoPessoa))
'informa que arquivo vai deserializar
Dim DataFile As New IO.FileStream("C:\pessoa.xml", _
IO.FileMode.Open)
Dim objetoPessoa As ObjetoPessoa
objetoPessoa = CType(Deserializer.Deserialize( _
DataFile), ObjetoPessoa)
DataFile.Close()
Return objetoPessoa
End Function
Private Function deserializarObjetoBin() _
As ObjetoPessoa
'cria o objeto de deserialização informando o tipo
'que ele vai deserializar
Dim Deserializer As New BinaryFormatter()
'informa qual arquivo ele vai deserializar
Dim DataFile As New FileStream("C:\pessoa.bin", _
FileMode.Open, FileAccess.Read, FileShare.None)
Dim objetoPessoa As ObjetoPessoa
objetoPessoa = CType( _
Deserializer.Deserialize(DataFile), ObjetoPessoa)
DataFile.Close()
Return objetoPessoa
End Function
Agora vamos criar o evento do botão Deserializar que lê o arquivo, gera o objeto e preenche os campos na tela, conforme a Listagem 6.
Private Sub Button2_Click(ByVal sender _
As System.Object, ByVal e _
As System.EventArgs) Handles Button2.Click
'cria objeto que será serializado
Dim objetoPessoa As New ObjetoPessoa
If rdbXml.Checked Then
'verifica que radioButton esta selecionado e
'chama a função de deserialização apropriada
objetoPessoa = Me.deserializarObjetoXML()
ElseIf rdbBinario.Checked Then
objetoPessoa = Me.deserializarObjetoBin()
End If
'preenche os atributos para serializar
txtNome.Text = objetoPessoa.nome
cboSexo.Text = objetoPessoa.sexo
txtSenha.Text = objetoPessoa.senha
End Sub
Pronto, temos um pequeno exemplo de serialização em disco. Agora vamos testar nossa aplicação, executando a mesma e preenchendo os campos. Escolha o tipo XML e clique em Serializar. No nosso exemplo estamos criando o arquivo pessoa.xml. Ao abrir o mesmo temos o conteúdo da Listagem 7.
<?xml version="1.0" encoding="utf-8"?><ObjetoPessoa
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<nome>teste</nome>
<sexo>77</sexo>
<senha>sdsdsd</senha>
</ObjetoPessoa>
Podemos observar que o atributo senha foi serializado mesmo com a tag , isso porque essa tag não é suportada quando a serialização é XML, apenas para serialização binária.
Vamos selecionar agora o tipo binário e clicar em Serializar. Será criado o arquivo pessoa.bin. Se limparmos os campos da tela e clicarmos em Deserializar, poderemos observar que o campo senha ficará em branco.
Web Service
Outra forma bastante utilizada para serialização é com sistemas distribuídos, ou seja, aplicações que funcionam em máquinas diferentes e trocam informações pela rede. Para podermos ver um exemplo disso vamos fazer um pequeno Web Service.
Web Service nada mais é que um serviço que permite que várias aplicações em plataformas diferentes possam se comunicar. Para isso, ela utiliza um padrão que é um formato universal, o formato XML.
Com Web Service podemos criar uma estrutura de métodos que podem ser chamados por outros sistemas, já existem diversos na internet, podemos citar como exemplo o Google que disponibiliza alguns serviços para que possam ser utilizados em outros sistemas.
Temos também a Amazom que disponibiliza a consulta de livros através de Web Services. Vamos criar um Web Service próprio, utilizando o .NET, é bastante simples. Vamos criar um novo projeto, do tipo Web Site.
Adicione um novo item do tipo Web Service, dando o nome de WebServiceSerializacao.asmx (Figura 4). Foi criado o Web Service que possui o código mostrado na Listagem 8.

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
_
_
_
Public Class WebServiceSerializacao
Inherits System.Web.Services.WebService
_
Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class
Podemos perceber que ele possui um método chamado HelloWord. Pronto! Foi fácil criar o Web Service. Vamos selecionar o arquivo WebServiceSerializacao.asmx como página inicial e executar o projeto pressionando F5.
Na tela que abre, podemos observar algumas informações do Web Service, inclusive o nome do método existente (Figura 5). Ao clicar em HelloWord ele abre outra tela mostrando informações sobre o protocolo utilizado (Figura 6). Clique então em Chamar (ou Invoke), será executado o método e mostrado o retorno na tela (Figura 7).



Serialização em Web Service
Vamos implementar o nosso método nesse Web Service, para isso vamos criar o objetoSerializavel. Adicione um novo projeto do tipo ClassLibrary, que chamaremos de ClassesSerializaveis (Figura 8). Vamos renomear a classe Class1.vb para WSPessoa.vb. Na Listagem 9 temos o código da classe WSPessoa.vb

Public Class WSPessoa
Public nome As String
Public sexo As Char
Public senha As String
End Class
Vamos adicionar a referência desse projeto no Web Service, clicando com o botão direito e escolhendo o item Add Reference. Selecione a aba Projects, escolha o projeto ClassesSerializaveis e clique em OK. Vamos criar o método no Web Service logo abaixo do HelloWord, conforme a Listagem 10.
Public Function retornaClasse() _
As ClassesSerializaveis.WSPessoa
Dim objetoPessoa As ClassesSerializaveis.WSPessoa = _
New ClassesSerializaveis.WSPessoa()
'preenche os atributos para serializar
objetoPessoa.nome = "Daniela"
objetoPessoa.sexo = "F"
objetoPessoa.senha = "3233"
Return objetoPessoa
End Function
Execute o projeto. Podemos observar na página aberta que agora aparece o método que acabamos de criar (Figura 9). Clique no link e depois em Chamar. Observe na Listagem 11 o retorno do Web Service.

<?xml version="1.0" encoding="utf-8" ?
<WSPessoa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<nome>Daniela</nome>
<sexo>70</sexo>
<senha>3233</senha>
</WSPessoa>
Podemos observar que o atributo sexo, por ser do tipo Char, foi passado no formato ASCII. Nosso Web Service está pronto. Vamos voltar para a primeira aplicação de serialização e fazer ela se comunicar com o Web Service.
Adicione mais um botão no formulário. Depois vamos adicionar uma referência ao Web Service, para isso, clique com o botão direito no projeto e escolha Add Web Reference.
Para que o projeto possa localizar o Web Service, primeiro temos que executar o Web Service no outro projeto. Você pode digitar a URL do Web Service ou escolher a opção Web services in this Solution (caso tenha criado em uma mesma solução todos os projetos). Clique no nome do Web Service e no botão Add Reference (Figura 10).

Vamos criar o evento do botão que adicionamos anteriormente e digitar o código da Listagem 12.
Private Sub Button3_Click(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles Button3.Click
'cria uma instância do tipo WSPessoa para
'receber do retorno do método
Dim objetoWsPessoa As localhost.WSPessoa
'instancia o Web Service
Dim webService As _
New localhost.WebServiceSerializacao
'chama o método do Web Service
objetoWsPessoa = webService.retornaClasse()
'preenche os campos da tela com o retorno
txtNome.Text = objetoWsPessoa.nome
txtSenha.Text = objetoWsPessoa.senha
cboSexo.Text = objetoWsPessoa.sexo
End Sub
Pronto agora é só executar, clicar no botão e ver o retorno do Web Service.
Nesta artigo você aprendeu a utilizar serialização de objetos para persistir um objeto em disco. Além de como utilizar Web Service para comunicar uma aplicação para outra e até mesmo enviar classes com valores. Utilize as técnicas aqui apresentadas para facilmente permitir a troca de objetos entre suas aplicações utilizando uma intranet ou internet, com Web Services.