Salvare i valori di una classe

lunedì 21 maggio 2012 - 09.16
Tag Elenco Tags  VB.NET  |  .NET 1.0  |  Visual Studio 2010

willy_80 Profilo | Senior Member

Ciao a tutti,
Sto lavorando su un programma in vb.net, all'interno di esso ho una classe (MyClass) la quale contiene una serie di property (A,B,C,...).
Siccome le property sono parecchie e visto che la classe deve essere ripopolata varie volte durante l'utilizzo del programma sto cercando un sistema per salvare su file e caricare da file i valori delle property evitando però di dover creare una sub che chiami una per una ogni property tipo:

printline (1,MyClass.A)
printline (1,MyClass.B)
printline (1,MyClass.C)
[...]

MyClass.A=lineinput (1)
MyClass.B=lineinput (1)
MyClass.C=lineinput (1)
[...]

A me basterebbe salvare il tutto in normalissimi file "txt".
Grazie

AntCiar Profilo | Expert

Ciao.

La cosa più semplice da fare è quella di "Serializzare" la tua classe.
La serializzazione genera un file formato xml contenente tutta la stuttura e i valori della tua classe. Per fare ciò basta fare 3 passi:

1- dare l'attributo "serializabile" alla tua classe:

<Serializable()> _ Public Class Class1 .... .... .... End Class

2: scrivere il metodo pubblico di serializzazione all'interno della tua classe:


Public Sub Serialize(ByVal pathFile As String) Try Dim sr As New IO.StreamWriter(pathFile, False, System.Text.Encoding.UTF8) Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Class1)) serializer.Serialize(sr, Me) sr.Close() Catch ex As Exception MsgBox(ex.Message) End Try End Sub


3: Scrivere la funzione statica di deserializzazione nella tua classe:

Public Shared Function deserialize(ByVal pathFile As String) As Class1 Try Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Class1)) Dim ret As Class1 Dim r As New IO.StreamReader(pathFile) ret = DirectCast(serializer.Deserialize(r), Class1) r.Close() Return ret Catch ex As Exception MsgBox(ex.Message) Return Nothing End Try End Function

Poi per usarla nel momento che devi salvare i valori basta che su un oggetto di tipo "MyClass" invochi il metodo .Serialize(pathfile) passandoci il percorso completo di dove salvare il file.

Per ricaricare i valori invece utilizzi il metodo statico Deserialize(pathFile)
Dim abc as MyClass = MyClass.Deserialize(pathFile)

In questo modo tutti gli oggetti interfacciati da property pubbliche vengono in automatico salvati (anche se un domani ne aggiungi altri non ti devi preoccupare di scrivere codice per salvarli)



Cristian Barca

willy_80 Profilo | Senior Member

Che dire...


MITICOOOOOOOOOO!!!!!!!!!!!!!!!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5