Serializzare/Deserializzare una classe in VB.NET

Spesso ci occorre salvare in un file una istanza di una classe in modo tale poterla caricare successivamente.

In Visual Basic .NET è possibile far ciò semplicemente serializzando e deserializzando all'occorrenza l'istanza della classe.

Esempio di come Serializzare classe in VB.NET  Scaricato 157 volte

Nell'esempio allegato a questo articolo verrà serializzata una lista di classi "Persona"; di seguito il codice sorgente della classe:

 
Public Class Persona
    Private _nome As String = ""
    Private _cognome As String = ""
    Private _dataNascita As Date = Now
 
    Public Sub New()
 
    End Sub
 
    Public Sub New(ByVal strNome As String, ByVal strCognome As String, ByVal dDataNascita As Date)
        _nome = strNome
        _cognome = strCognome
        _dataNascita = dDataNascita
    End Sub
 
    Public Property Nome() As String
        Get
            Return _nome
        End Get
        Set(ByVal value As String)
            _nome = value
        End Set
    End Property
 
    Public Property Cognome() As String
        Get
            Return _cognome
        End Get
        Set(ByVal value As String)
            _cognome = value
        End Set
    End Property
 
    Public Property DataNascita() As Date
        Get
            Return _dataNascita
        End Get
        Set(ByVal value As Date)
            _dataNascita = value
        End Set
    End Property
End Class

La funzione che permette la serializzazione è la seguente:

 
Public Sub SalvaPersone()
    Try
        If _NomeFile <> "" Then
            Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(List(Of Persona)))
            Dim file As New System.IO.StreamWriter(_NomeFile)
            writer.Serialize(file, _ListaPersone)
            file.Close()
        End If
    Catch ex As Exception
        MsgBox(ex.ToString, MsgBoxStyle.Critical)
    End Try
End Sub

La funzione analoga che invece deserializza è:

 
Public Sub CaricaPersone()
    Try
        If IO.File.Exists(_NomeFile) = True Then
            Dim reader As New System.Xml.Serialization.XmlSerializer(GetType(List(Of Persona)))
            Dim file As New System.IO.StreamReader(_NomeFile)
            _ListaPersone = CType(reader.Deserialize(file), List(Of Persona))
            file.Close()
        End If
    Catch ex As Exception
       MsgBox(ex.Message, MsgBoxStyle.Critical)
    End Try
    AggiornaLista()
End Sub

Dimenticavo,_ListaPersone è così definito:

 
Private _ListaPersone As New List(Of Persona)

Sicuramente, scaricando l'esempio, tutto sarà più chiaro.