Nozioni fondamentali sulla serializzazione di .NET Framework
Aggiornamento: novembre 2007
La serializzazione è il processo di conversione di un oggetto in un flusso di byte allo scopo di archiviarlo in memoria, in un database o in un file. Lo scopo principale è di salvare lo stato di un oggetto allo scopo di poterlo ricreare quando necessario. Il processo inverso è chiamato deserializzazione.
Funzionamento del processo di serializzazione
In questa illustrazione viene mostrato il processo generale di serializzazione.
L'oggetto viene serializzato in un flusso, nel quale non sono trasportati solo i dati ma anche informazioni sul tipo di oggetto, ad esempio la versione, la lingua e il nome dell'assembly. Dal flusso, è possibile archiviarlo in un database, un file o nella memoria.
Utilizzo per la serializzazione
La serializzazione consente allo sviluppatore di salvare lo stato di un oggetto e di ricrearlo in base alle esigenze, fornendo l'archiviazione degli oggetti e lo scambio dei dati. Tramite la serializzazione, uno sviluppatore può eseguire attività quali l'invio di un oggetto a un'applicazione remota tramite un servizio Web, il trasferimento di un oggetto da un dominio all'altro, il passaggio di un oggetto attraverso un firewall come stringa XML o il mantenimento della protezione o delle informazioni specifiche dell'utente nelle applicazioni.
Attribuzione dello stato di serializzazione a un oggetto
Per serializzare un oggetto, è necessario l'oggetto da serializzare, un flusso dove contenere l'oggetto serializzato e uno Formatter. In System.Runtime.Serialization sono contenute le classi necessarie per serializzare e deserializzare gli oggetti.
Applicare l'attributo SerializableAttribute a un tipo per indicare che è possibile serializzare le relative istanze. Se si cerca di serializzare un tipo senza l'attributo SerializableAttribute, verrà generata l'eccezione SerializationException.
Se si desidera rendere serializzabile un campo all'interno della classe, applicare l'attributo NonSerializedAttribute. Se un campo di un tipo serializzabile contiene un puntatore, un handle o qualsiasi altro tipo di struttura di dati specifico di un particolare ambiente e non è possibile ricostituire il campo in un ambiente differente, può essere necessario renderlo non serializzabile.
Se una classe serializzata contiene riferimenti agli oggetti di altre classi contrassegnate con una SerializableAttribute, anche gli oggetti saranno serializzati.
Serializzazione binaria e XML
È possibile utilizzare la serializzazione binaria o XML. Nella serializzazione binaria, vengono serializzati tutti i membri, anche quelli in sola lettura, per l'ottimizzazione delle prestazioni. La serializzazione XML fornisce codice più leggibile, nonché una maggiore flessibilità nella condivisione degli oggetti e nell'utilizzo ai fini dell'interoperablità.
Serializzazione binaria
La serializzazione binaria utilizza la codifica binaria per produrre una serializzazione compatta da utilizzare, ad esempio, ai fini dell'archiviazione o dei flussi di rete basati su socket. Non è adatta per il trasferimento di dati tramite un firewall ma garantisce prestazioni ottimali per l'archiviazione dei dati.
Serializzazione XML
La serializzazione XML consente di serializzare le proprietà e i campi pubblici di un oggetto, o i parametri e i valori restituiti dei metodi, in un flusso XML conforme a uno specifico documento in linguaggio XSD (XML Schema Definition). La serializzazione XML produce classi fortemente tipizzate con campi e proprietà pubbliche convertiti in XML. In System.Xml.Serialization sono contenute le classi necessarie per la serializzazione e la deserializzazione XML.
È possibile applicare attributi alle classi e ai membri delle classi per controllare le modalità di serializzazione o deserializzazione di un'istanza della classe da parte di una XmlSerializer. Per ulteriori informazioni, vedere Controllo della serializzazione XML mediante attributi e Attributi per il controllo della serializzazione XML.
Nella tabella riportata di seguito sono elencate le attività relative alla serializzazione XML:
Per |
Vedere |
---|---|
Serializzare un oggetto |
|
Deserializzare un oggetto |
|
Generare classi e documentazione XML Schema |
|
Fornire un elemento XML e i nomi dell'attributo XML |
Procedura: Fornire un elemento XML e i nomi dell'attributo XML |
Specificare un nome di elemento alternativo per un flusso XML |
Procedura: Specificare un nome di elemento alternativo per un flusso XML |
Controllare la serializzazione delle classi derivate |
Procedura: Controllare la serializzazione delle classi derivate |
Serializzazione SOAP
La serializzazione XML può essere utilizzata anche per serializzare oggetti nei flussi XML conformi alla specifica SOAP. Il SOAP è un protocollo basato su XML, specificamente progettato per trasportare chiamate di routine mediante XML. Al pari della serializzazione XML, gli attributi possono essere utilizzati per controllare i messaggi SOAP in stile letterale generati da qualsiasi servizio Web XML. Per ulteriori informazioni, vedere Serializzazione XML con Servizi Web XML e Attributi per il controllo della serializzazione SOAP codificata.
Nella tabella riportata di seguito sono elencate le attività relative alla serializzazione XML con codifica SOAP:
Per |
Vedere |
---|---|
Serializzare un oggetto come flusso XML con codifica SOAP |
Procedura: Serializzare un oggetto come flusso XML con codifica SOAP |
Eseguire l'override della serializzazione XML con codifica SOAP |
Procedura: Eseguire l'override della serializzazione XML con codifica SOAP |
Serializzazione di base e personalizzata
La serializzazione può essere di base e personalizzata. La serializzazione di base utilizza .NET Framework per serializzare automaticamente l'oggetto.
Serializzazione di base
L'unico requisito nella serializzazione di base è che sull'oggetto deve essere applicato l'attributo SerializableAttribute. Per impedire la serializzazione di campi specifici, utilizzare la NonSerializedAttribute.
Quando si utilizza la serializzazione di base, il controllo delle versioni degli oggetti potrebbe creare problemi. In questo caso potrebbe essere consigliabile utilizzare la serializzazione personalizzata. La serializzazione di base è il modo più semplice per eseguire la serializzazione, ma non consente di controllare a fondo il processo.
Serializzazione personalizzata
Tramite la serializzazione personalizzata è possibile specificare in modo preciso gli oggetti da serializzare e le modalità di serializzazione. La classe deve essere contrassegnata con la SerializableAttribute e deve essere implementata l'interfaccia ISerializable.
Se si desidera deserializzare l'oggetto anche in modo personalizzato, utilizzare un costruttore personalizzato.
Serializzazione della finestra di progettazione
La serializzazione della finestra di progettazione è un tipo speciale di serializzazione relativo al tipo di persistenza degli oggetti generalmente associati agli strumenti di sviluppo. La serializzazione della finestra di progettazione è il processo di conversione di un oggetto grafico in un file di origine che è possibile utilizzare successivamente per recuperare l'oggetto grafico. In un file di origine può essere contenuto codice o persino informazioni sulla tabella SQL. Per ulteriori informazioni, vedere Cenni preliminari sulla serializzazione della finestra di progettazione.
Vedere anche
Attività
Procedura: Bloccare i dati serializzati