Condividi tramite


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.

Rappresentazione grafica della 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

Procedura: Serializzare un oggetto

Deserializzare un oggetto

Procedura: Deserializzare un oggetto

Generare classi e documentazione XML Schema

Procedura: Utilizzare lo strumento di definizione di schemi XML per generare classi e documenti di schemi XML.

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

Concetti

Esempi di serializzazione XML

Classi utilizzate per la serializzazione di .NET Framework