A classe XmlSerializer permite Serializar e Deserializar objetos para/de documentos XML.
Objetos tipo imagem não são possíveis de Serializar de forma direta.
O exemplo seguinte mostra como pode ser contornado este problema de modo a poder serializar objetos com imagens
Código | ClassImagem.vb |
ClassImagens.vb | |
Form.vb | |
Outros exemplos com imagens | |
![]() |
Exemplo aplicado à Classe Aluno |
Imports System.Xml.Serialization Public Class ClassImagem Private _nome As String Private _id As String Private _imagem As Image Private _ImageFilename As String Public Sub New() End Sub Public Property Id As String Get Return _id End Get Set(value As String) _id = value End Set End Property Public Property Nome As String Get Return _nome End Get Set(value As String) _nome = value End Set End Property ''' <summary> ''' ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks>Campos tipo image não podem ser guardados no XML ''' XmlIgnore() é utilizado para que a propriedade seja ignorada pelo serialize ''' </remarks> <XmlIgnore()> Public Property Imagem As Image Get Return _imagem End Get Set(value As Image) _imagem = value End Set End Property Public Property ImageFilename As String Get Return _ImageFilename End Get Set(value As String) _ImageFilename = value 'ler a imagem do ficheiro no caso de ser nula If Imagem Is Nothing Then LerImagem() End If End Set End Property ''' <summary> ''' Ler uma imagem de um ficheiro ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Private Function LerImagem() As Boolean Dim temp As Boolean = False Try Imagem = Image.FromFile(_ImageFilename) temp = True Catch ex As Exception End Try Return temp End Function End Class
![top](../../Imagens/top.gif)
Public Class ClassImagens Inherits Collections.CollectionBase Public Sub Add(ByVal NewMyObject As ClassImagem) Me.List.Add(NewMyObject) End Sub Public Sub Remove(ByVal oldMyObject As ClassImagem) Me.List.Remove(oldMyObject) End Sub Default Public Property item(ByVal index As Integer) As ClassImagem Get Return Me.List.Item(index) End Get Set(ByVal value As ClassImagem) Me.List.Item(index) = value End Set End Property Public Shadows Sub clear() MyBase.Clear() End Sub Public Shadows Sub RemoveAt(ByVal index As Integer) Remove(item(index)) End Sub ''' <summary> ''' Gravar o ficheiro XML ''' </summary> ''' <param name="Filename">Nome do ficheiro XML</param> ''' <param name="Imagens">Objeto a gravar</param> ''' <remarks></remarks> Sub WriteXML(Filename As String, Imagens As ClassImagens) Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(ClassImagens)) Dim file As New System.IO.StreamWriter(Filename) writer.Serialize(file, Imagens) file.Close() End Sub ''' <summary> ''' Ler o ficheiro XML ''' </summary> ''' <param name="Filename">Nome do ficheiro XML</param> ''' <returns>Objeto lido</returns> ''' <remarks></remarks> Function LerXML(Filename As String) As ClassImagens Dim Imagens As ClassImagens = New ClassImagens Try Dim reader As New System.Xml.Serialization.XmlSerializer(GetType(ClassImagens)) Dim file As New System.IO.StreamReader(Filename) Imagens = CType(reader.Deserialize(file), ClassImagens) file.Close() Catch ex As Exception End Try Return Imagens End Function End Class
![top](../../Imagens/top.gif)
Public Class FormImagemTeste 'Nome do ficheiro XML Private Filename As String = "teste.xml" ''' <summary> ''' Ler uma imagem de um ficheiro ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim originalImage As Image If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ' Open Image originalImage = Image.FromFile(OpenFileDialog1.FileName) ImagemPictureBox.Image = originalImage ImageFilenameTextBox.Text = OpenFileDialog1.FileName End If End Sub Private Sub FormImagemTeste_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load LerXML() End Sub Private Sub ClassImagensBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles ClassImagensBindingNavigatorSaveItem.Click GravarXML() End Sub ''' <summary> ''' Ler o ficheiro XML ''' </summary> Private Sub LerXML() Dim Imagens As ClassImagens = New ClassImagens Imagens = Imagens.LerXML(Filename) ClassImagensBindingSource.DataSource = Imagens End Sub ''' <summary> ''' Garvar Ficheiro XML ''' </summary> ''' <remarks></remarks> Private Sub GravarXML() Dim Imagens As ClassImagens = New ClassImagens ClassImagensBindingSource.EndEdit() For Each temp As ClassImagem In ClassImagensBindingSource Imagens.Add(temp) Next Imagens.WriteXML(Filename, Imagens) End Sub End Class
![top](../../Imagens/top.gif)