VB .NET - Armazenando um objeto serializado em um arquivo
Neste artigo vou mostrar como armazenar objetos serializados em um arquivo usando a linguagem VB .NET. |
Já ouviu falar em serialização ? O que é serializar ? Como podemos fazer isto na plataforma .NET ?
De forma genérica a serialização é uma técnica usada para persistir objetos , ou seja : gravar objetos em disco , fazer a transmissão remota de objetos via rede , armazenar os objetos em um banco de dados e/ou arquivos (binários , xml, etc.)
Serializar nada mais é do que colocar os valores que o objeto está utilizando juntamente com suas propriedades de uma forma que fique em série (sequencial) . Fazendo isto estamos tornando o objeto Serializable, e, tornando um objeto Serializable, estamos atribuindo essa qualidade a ele, e dando privilégios para que o mesmo possa ser gravado em disco ou enviado por rede.
A serialização é o processo de armazenar um objeto , incluindo todos os atributos públicos e privados para um stream.
Então vamos colocar o seguinte problema:
Você precisa armazenar um objeto serializado e o seu estado em um arquivo e depois deserializar o objeto.
Não existe uma única abordagem para resolver esse problema, e, neste artigo eu vou apresentar uma das abordagens possíveis.
Para resolver o problema podemos usar formatador
para serializar o objeto e gravá-lo em um objeto
System.IO.FileStream. Quando você precisar recuperar o objeto, use o
mesmo tipo de formatador para ler os dados serializados do arquivo e assim
deserialize o objeto.
A biblioteca de classes do .NET Framework inclui as seguintes implementações de
formatador para serializar objetos em formato binário ou SOAP:
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
System.Runtime.Serialization.Formatters.Soap.SoapFormatter
Usando as classes BinaryFormatter e
SoapFormatter, você pode serializar uma instância de qualquer tipo
serializável. A classe BinaryFormatter produz um fluxo de dados
binários representando o objeto e seu estado. A classe SoapFormatter produz um
documento SOAP.
SOAP é um protocolo baseado em XML usado para trocar mensagens pela rede. O SOAP
é usado como o principal mecanismo de comunicação com os serviços da Web.
As classes BinaryFormatter e SoapFormatter implementam a interface
System.Runtime.Serialization.IFormatter, que define
dois métodos: Serialize e Deserialize.
O método Serialize() usa uma referência a System.IO.Stream e uma referência System.Object como argumentos, serializa o objeto, e escreve-o para o fluxo.
O método Deserialize() toma uma referência de fluxo como um argumento, lê os dados de objeto serializados do fluxo e retorna uma referência de objeto a um objeto desserializado. (Você deve converter a referência de objeto retornada para o tipo correto)
Então vamos aplicar esses conceitos e mostrar isso na prática.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando um projeto no VS 2015
Abra o Visual Studio Community 2015 e clique em New Project;
Selecione Visual Basic, o template Windows Forms Application e informe o nome Vbnet_Serializacao;
A seguir no formulário Form1.vb inclua os seguintes controles:
Label
TextBox - txtNome
Button - btnIncluir
ListBox - lbAlunos
Button - btnEncerrar
GroupBox - grpAcao
RadioButtons - btnSerializar e btnDeserializar
Buttons - btnSerializar e btnDeserializar
TextBox - txtResultadoDeserializacao
Disponha os controles conforme o leiaute da figura abaixo:
Referenciando o namespace System.Runtime.Serialization.Formatters.Soap
Clique com o botão direito sobre o projeto e a seguir clique em Add Reference;
A seguir clique em Assemblies e marque o item System.Runtime.Serialization.Formatters.Soap;
Definindo a classe de serviços com os métodos para serializar e deserializar arquivos
No menu Project clique em Add Class e informe o nome Servicos.vb. A seguir inclua o código abaixo nesta classe:
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Runtime.Serialization.Formatters.Soap
Public Class Servicos
' Serializa um objeto ArrayList para um arquivo binário
Public Shared Sub BinarySerialize(ByVal lista As ArrayList, ByVal nomeArquivoBinario As String)
Using str As IO.FileStream = File.Create(nomeArquivoBinario)
Dim bf As New BinaryFormatter()
bf.Serialize(str, lista)
End Using
End Sub
' Deserializa um objeto arrayList de um arquivo binário
Public Shared Function BinaryDeserialize(ByVal NomeArquivo As String) As ArrayList
Dim lista As ArrayList = Nothing
Using str As FileStream = File.OpenRead(NomeArquivo)
Dim bf As New BinaryFormatter()
lista = DirectCast(bf.Deserialize(str), ArrayList)
End Using
Return lista
End Function
' Serializa um objeto ArrayList para um arquivo SOAP
Public Shared Sub SoapSerialize(ByVal lista As ArrayList, ByVal nomeArquivoSoap As String)
Using str As FileStream = File.Create(nomeArquivoSoap)
Dim sf As New SoapFormatter()
sf.Serialize(str, lista)
End Using
End Sub
' Deserializa um objteo ArrayList de um arquivo SOAP
Public Shared Function SoapDeserialize(ByVal NomeArquivo As String) As ArrayList
Dim lista As ArrayList = Nothing
Using str As FileStream = File.OpenRead(NomeArquivo)
Dim sf As New SoapFormatter()
lista = DirectCast(sf.Deserialize(str), ArrayList)
End Using
Return lista
End Function
'Le um arquivo Public Shared Function LerArquivo(ByVal nomeArquivoBin As String) As String Dim fs As New FileStream(nomeArquivoBin, FileMode.Open) Dim b(fs.Length - 1) As Byte fs.Read(b, 0, b.Length - 1) fs.Close() fs = Nothing Dim dados As String = System.Text.ASCIIEncoding.ASCII.GetString(b) Return dados End Function End Class
|
Nesta classe definimos métodos estáticos para serializar e deserializar arquivos SOAP e Binários, usando os recursos dos namespaces System.Runtime.Serialization.Formatters.Binary e System.Runtime.Serialization.Formatters.Soap.
Definindo o código do formulário
Inclua o seguinte namespace no formulário:
Imports System.IO
A seguir defina as seguinte variáveis que iremos usar para o ArrayList e para os nomes dos arquivos:
Dim alunos As New ArrayList
Dim nomeArquivoSoap As String = "aluno.soap"
Dim nomeArquivoBinario As String = "aluno.bin"
Agora definir o código nos eventos Click dos controles do formulário:
1 - Criando um ArrayList
Inclua o código abaixo no evento Click do botão : Incluir no Array
Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click
lbAlunos.Items.Add(txtNome.Text)
alunos.Add(txtNome.Text)
txtNome.Text = ""
grpAcao.Enabled = True
End Sub
|
2 - Serializando objetos
No evento Click do botão Serializar inclua o código a seguir:
Private Sub btnSerializar_Click(sender As Object, e As EventArgs) Handles btnSerializar.Click
If rdbSOAP.Checked Then
If File.Exists(nomeArquivoSoap) Then
File.Delete(nomeArquivoSoap)
End If
Try
Servicos.SoapSerialize(alunos, nomeArquivoSoap)
MessageBox.Show("Arquivo " & nomeArquivoSoap & " serializado com sucesso")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Else
If File.Exists(nomeArquivoBinario) Then
File.Delete(nomeArquivoBinario)
End If
Try
Servicos.BinarySerialize(alunos, nomeArquivoBinario)
MessageBox.Show("Arquivo " & nomeArquivoBinario & " serializado com sucesso")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
|
3 - Deserializando objetos
No evento Click do botão - Deserializar - inclua o código abaixo:
Private Sub btnDeserializar_Click(sender As Object, e As EventArgs) Handles btnDeserializar.Click
If rdbSOAP.Checked Then
If File.Exists(nomeArquivoSoap) Then
Dim listaSoap As ArrayList = Servicos.SoapDeserialize(nomeArquivoSoap)
For Each aluno As String In listaSoap
txtResultadoDeserializacao.Text += aluno & vbTab
Next
Else
MessageBox.Show("Arquivo " & nomeArquivoSoap & " não existe")
End If
Else
If File.Exists(nomeArquivoBinario) Then
Dim listaBinaria As ArrayList = Servicos.BinaryDeserialize(nomeArquivoBinario)
For Each aluno As String In listaBinaria
txtResultadoDeserializacao.Text += aluno & vbTab
Next
Else
MessageBox.Show("Arquivo " & nomeArquivoBinario & " não existe")
End If
End If
End Sub
|
Executando o projeto iremos obter:
Pegue o projeto completo aqui: Vbnet_Serializacao.zip
"Porque as suas coisas invisíveis, desde a criação do mundo, tanto o seu eterno
poder, como a sua divindade, se entendem, e claramente se vêem pelas coisas que
estão criadas, para que eles fiquem inescusáveis"
Romanos 1:20
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Serializando Objetos para String e vice-versa - Macoratti.net