Condividi tramite


Serializzazione (C# e Visual Basic)

La serializzazione è il processo di conversione di un oggetto in un flusso di byte affinché venga conservato 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, le impostazioni cultura 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 sicurezza 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 in cui contenere l'oggetto serializzato e un 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.

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à pubblici 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.

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.

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 all'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, markup o persino informazioni su tabelle SQL. Per ulteriori informazioni, vedere Cenni preliminari sulla serializzazione della finestra di progettazione.

Argomenti correlati