![]() |
Neste artigo vou mostrar como podemos serializar e desserializar uma lista de objetos usando a linguagem VB .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.
Se você faz a serialização naturalmente vai querer fazer o processo inverso - deserialização , que seria restaurar os atributos de um objeto gravado em um stream. (Este stream pode ser um arquivo binário , xml , etc.)
Neste artigo vamos realizar essas operações em uma lista de objetos.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando a solução no VS Community 2015
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome Serializar_ListaObjetos e clique no botão OK;
![]() |
No formulário Form1 inclua a partir da ToolBox os seguintes controles:
Defina o leiaute do formulário conforme a figura abaixo:
![]() |
Definindo o objeto Aluno
Vamos definir agora o objeto que será o nosso domínio e partir do qual iremos criar a lista de objetos.
Para isso vamos criar uma classe chamada Aluno no projeto via menu Project -> Add Class definindo o código abaixo nesta classe:
<Serializable>
Public Class Aluno
Public Property Nome As String
Public Property Idade As Integer
Public Property Email As String
Public Property Inscricao As Date
End Class
|
Na classe Aluno temos 4 propriedades :
Definimos também o atributo <Serializable> para permitir que o objeto seja serializável.
No início do formulário vamos definir uma variável ListaAlunos como um tipo List(of Aluno) que representa a lista de objetos Aluno:
Dim ListaAlunos As List(Of Aluno) = NothingCriando a classe Serializar
No menu Project clique em Add Class e informe o nome Serializar.vb, e , inclua o código abaixo nesta classe:
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Xml.Serialization
Public Class Serializar
Public Function SerializacaoXML(_alunos As List(Of Aluno)) As String
Try
Dim xmlSer As New XmlSerializer(_alunos.GetType())
Dim textWriter As New StringWriter()
xmlSer.Serialize(textWriter, _alunos)
xmlSer = Nothing
Return textWriter.ToString()
Catch ex As Exception
Throw ex
End Try
End Function
Public Function SerializaSalvaXML(_alunos As List(Of Aluno)) As Boolean
Try
Dim xmlSer As New XmlSerializer(_alunos.GetType())
Dim stream As Stream = New FileStream("c:\dados\AlunosXML.xml", FileMode.Create, FileAccess.Write, FileShare.None)
xmlSer.Serialize(stream, _alunos)
xmlSer = Nothing
stream.Close()
Return True
Catch ex As Exception
Throw ex
End Try
End Function
Public Function DeserialicaoXML(data As [String]) As List(Of Aluno)
Try
Dim xmlSer As New System.Xml.Serialization.XmlSerializer(GetType(List(Of Aluno)))
Dim reader As TextReader = New StringReader(data)
Dim obj As Object = xmlSer.Deserialize(reader)
Return DirectCast(obj, List(Of Aluno))
Catch ex As Exception
Throw ex
End Try
End Function
Public Function SerializacaoBinaria(_alunos As List(Of Aluno), local As String) As Boolean
Try
If Directory.Exists(Path.GetDirectoryName(local)) Then
Using stream As Stream = File.Open(local, FileMode.Create)
Dim bin As New BinaryFormatter()
bin.Serialize(stream, _alunos)
End Using
Return True
Else
Throw New Exception("O local do arquivo informado não existe.")
End If
Catch ex As Exception
Throw ex
End Try
End Function
Public Function DeserializacaoBinaria(local As String) As List(Of Aluno)
Try
If Directory.Exists(Path.GetDirectoryName(local)) Then
Using stream As Stream = File.Open(local, FileMode.Open)
Dim bin As New BinaryFormatter()
Dim listaAlunos = DirectCast(bin.Deserialize(stream), List(Of Aluno))
Return listaAlunos
End Using
Else
Throw New Exception("O local do arquivo informado não existe.")
End If
Catch ex As Exception
Throw ex
End Try
End Function
End Class
|
Nesta classe temos os métodos:
Definindo o código do formulário
Agora vamos incluir no formulário o código em cada evento Click do respectivo botão de comando.
1- Criar Lista de Objetos
Private Sub btnCriarListaObjetos_Click(sender As Object, e As EventArgs) Handles btnCriarListaObjetos.Click
'Inicilizando uma coleção de objetos aluno usando os inicializadores de objetos
ListaAlunos = New List(Of Aluno)() From
{
New Aluno() With {
.Nome = "Macoratti",
.Idade = 48,
.Email = "mac@yahoo.com",
.Inscricao = New Date(2015, 8, 1)
},
New Aluno() With {
.Nome = "Jefferon",
.Idade = 24,
.Email = "jeff@bol.com.br",
.Inscricao = New Date(2015, 7, 1)
},
New Aluno() With {
.Nome = "Janice",
.Idade = 20,
.Email = "jan@hotmail.com",
.Inscricao = New Date(2015, 3, 2)
},
New Aluno() With {
.Nome = "Miriam",
.Idade = 40,
.Email = "mimi@hotmail.com",
.Inscricao = New Date(2016, 2, 11)
},
New Aluno() With {
.Nome = "Jessica",
.Idade = 23,
.Email = "jess@hotmail.com",
.Inscricao = New Date(2016, 2, 9)
}
}
ListarAlunos(ListaAlunos, lbAlunosMemoria)
btnSerializarXML.Enabled = True
btnSerializarBinario.Enabled = True
End Sub
|
O método ListarAlunos() passa a lista de objetos (ListaAlunos) e o nome do controle listbox onde vamos exibir os objetos Aluno:
Private Sub ListarAlunos(_alunos As List(Of Aluno), ctrlLb As ListBox)
lbAlunosMemoria.Items.Clear()
For Each aluno In _alunos
Dim dadosAluno As String = aluno.Nome + vbTab + aluno.Email + vbTab + aluno.Idade.ToString() + vbTab + aluno.Inscricao.ToShortDateString()
ctrlLb.Items.Add(dadosAluno)
Next
End Sub
|
2- Serializar para XML
Private Sub btnSerializarXML_Click(sender As Object, e As EventArgs) Handles btnSerializarXML.Click
Try
Dim serXML As New Serializar
txtAlunosXML.Text = serXML.SerializaSalvaXML(ListaAlunos)
Catch ex As Exception
MessageBox.Show("Erro " & ex.Message)
End Try
End Sub
|
Serializa a lista de objetos e retorna uma string que é exibida na caixa de texto txtAlunos.Text.
3- Serializar para Binário
Private Sub btnSerializarBinario_Click(sender As Object, e As EventArgs) Handles btnSerializarBinario.Click
Try
Dim serBIN As New Serializar
If (serBIN.SerializacaoBinaria(ListaAlunos, txtLocalArquivoBinario.Text)) Then
MessageBox.Show("Lista de objetos serializada para binário com sucesso.")
btnDeserializarBinario.Enabled = True
Else
MessageBox.Show("Ocorreu um erro ao serializar a lista.")
End If
Catch ex As Exception
MessageBox.Show("Erro " & ex.Message)
End Try
End Sub
|
Serializa a lista de objetos no local informado na caixa de texto txtLocalArquivoBinario.
4- Deserializar a partir do binário
Private Sub btnDeserializarBinario_Click(sender As Object, e As EventArgs) Handles btnDeserializarBinario.Click
Dim alunos As List(Of Aluno)
Try
Dim deserBIN As New Serializar
alunos = deserBIN.DeserializacaoBinaria(txtLocalArquivoBinario.Text)
ListarAlunos(alunos, lbDados)
Catch ex As Exception
MessageBox.Show("Erro " & ex.Message)
End Try
End Sub
|
Deserializa o arquivo binário a partir do local informado e exibe no ListBox - lbDados - usando o método ListarAlunos.
Executando o projeto iremos obter:
Pegue
o projeto completo aqui:
Serializando_ListaObjetos.zip
Até o
próximo artigo...
Deitar-me faz em verdes pastos, guia-me
mansamente a águas tranqüilas.Refrigera a minha alma; guia-me pelas veredas da
justiça, por amor do seu nome.
Salmos 23:2,3
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: