Posts
256
Comments
330
Trackbacks
7
gennaio 2008 Entries
Interfaccia ISerializable e Serializzazioni Custom

Implementando l'interfaccia ISerializable nelle nostre classi, possiamo personalizzare il processo di serializzazione/deserializzazone dei tipi.
Ad esempio, un istanza di oggetto potrebbe contenere dei dati (ad esempio una password) che non vogliamo che risulti visibile
tramite editor di testo (come notepad) dopo aver serializzato l'oggetto come file su disco.
Nel codice di esempio  è presente una classe Persona  (onnipresente :-) ),  che implementa il metodo GetObjectData (per la fase di serializzazione) con il codice necessario a cifrare il valore del campo "password", ed il costruttore con opportuna firma (per la fase di deserializzazione) nel quale viene decifrato il valore da attribuire al campo "password" dell'oggetto. Ovviamente i metodi utilizzati per cifrare/decifrare il testo dell'esempio sono banali
e non usabili nel mondo reale. Nel codice della classe, sono presenti due metodi, contrassegnati dagli attributi OnSerialized ed
OnDeserialized che permettono d'intercettare rispettivamente la fine del processo di serializzazione e di deserializzazione.
E' possibile intercettare l'inizio delle operazioni di serializzazione e di deserializzazione tramite gli attributi OnSerializing e OnDeserializing.
I metodi che intercettano gli eventi di serializzazione devono accettare un unico parametro di tipo StreamingContext, devono "ritornare Void" e
devono essere contrassegnati dall'attributo che corrisponde con l'evento che vogliamo intercettare.
Il codice "principale" della classe "Persona" è il seguente (in fondo al post è presente il collegamento per eseguire il download dell'
intero codice)

'Classe serializzabile
<Serializable()> _
Public Class Persona
Implements System.Runtime.Serialization.ISerializable

'...definizione campi privati e proprietà
'Costruttore senza parametri
Public Sub New()
End Sub 'In fase di deserializzazone, viene invocato questo costruttore dopo che il formattatore
'ha deserializzato i dati dell'oggetto SerializationInfo.
Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
_nome = info.GetString(
"nome")
_cognome = info.GetString(
"cognome")
_username = info.GetString(
"username")
'Recupera la password decifrandola
_password = OttieniTestoInChiaro(info.GetString("password"))
End Sub

'In fase di serializzazione, l'oggetto Formatter richiama questo metodo per popolare la classe
'SerializationInfo con i dati necessari alla rappresentazione dell'oggetto
Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData
info.AddValue(
"nome", _nome)
info.AddValue(
"cognome", _cognome)
info.AddValue(
"username", _username)
'La password non deve essere in chiaro
info.AddValue("password", OttieniTestoCifrato(_password))
End Sub
<OnSerialized()> _ Private Sub OnSerialized(ByVal context As StreamingContext)
'Ricorda che l'oggetto è stato serializzato
_serializzato = True End Sub
<OnDeserialized()> _ Private Sub OnDeserialized(ByVal context As StreamingContext)
'L'oggetto è stato deserializzato, quindi imposta a False la proprietà Serializzato
_serializzato = False End Sub '...altro codice

End Class

Codice della classe "Persona"

Technorati Tag:
posted @ martedì 22 gennaio 2008 11.19 | Feedback (0)
Report Locali & Parametri

Spesso mi capita di leggere nei forum domande relative all'utilizzo dei parametri nei report locali. Sperando che il progetto possa essere di aiuto, un esempio concreto per la visualizzazione di stringhe ed immagini.

ReportParameter

Codice sorgente progetto

posted @ giovedì 10 gennaio 2008 23.20 | Feedback (4)
Regular Expression Designer
Un (free) Regular Expression Designer. Download disponibile al seguente indirizzo  www.radsoftware.com.au/regexdesigner/
posted @ martedì 8 gennaio 2008 3.34 | Feedback (0)
Classe CultureInfo e separatore decimale

Se volessimo, ad esempio, cambiare il carattere di separatore decimale in una nostra applicazione, è sufficiente utilizzare

la classe System.Globalization.CultureInfo. Esempio:

Dim culture As New System.Globalization.CultureInfo("it-IT")
Dim numberFormat As New System.Globalization.NumberFormatInfo()
'Visualizza il separatore decimale corrente
MessageBox.Show(numberFormat.NumberDecimalSeparator)
'Imposta la chiocciola come separatore decimale
numberFormat.NumberDecimalSeparator = "@" culture.NumberFormat = numberFormat
'Visualizza il separatore decimale corrente
MessageBox.Show(numberFormat.NumberDecimalSeparator)
'Imposta l'oggetto Culture
System.Threading.Thread.CurrentThread.CurrentCulture
= culture

Dim valore As Double = 0 valore = 10 / 30
'
Visualiza 0@33333333
MessageBox.Show(valore)
Technorati Tag:
posted @ martedì 8 gennaio 2008 1.42 | Feedback (0)
News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro