Visual Studio

Home

Dicas

Exemplos Diversos

Class

Collection

Serialize/Deserialize

Forms

Exemplos

Comparação entre Dictionary , Collections e ArrayList

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

Executável Executável Fonte


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
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 IntegerAs 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 StringAs 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
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.EventArgsHandles 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.EventArgsHandles MyBase.Load
        LerXML()
    End Sub
 
    Private Sub ClassImagensBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgsHandles 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