Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La serializzazione è il processo di conversione di un oggetto in un flusso di byte per archiviare l'oggetto o trasmetterlo alla memoria, a un database o a un file. Lo scopo principale è quello di salvare lo stato di un oggetto per poterlo ricreare quando necessario. Il processo inverso è denominato deserializzazione.
Funzionamento della serializzazione
Questa figura mostra il processo complessivo di serializzazione.
L'oggetto viene serializzato in un flusso, che contiene non solo i dati, ma informazioni sul tipo dell'oggetto, come la versione, la cultura e il nome assembly. Da tale flusso, può essere archiviato in un database, in un file o in una memoria.
Usi per la serializzazione
La serializzazione consente allo sviluppatore di salvare lo stato di un oggetto e ricrearlo in base alle esigenze, fornendo l'archiviazione di oggetti e lo scambio di dati. Tramite la serializzazione, uno sviluppatore può eseguire azioni come l'invio dell'oggetto a un'applicazione remota tramite un servizio Web, il passaggio di un oggetto da un dominio a un altro, il passaggio di un oggetto attraverso un firewall come stringa XML o la gestione di informazioni specifiche dell'utente o di sicurezza nelle applicazioni.
Serializzazione JSON
Lo spazio dei nomi System.Text.Json contiene classi per la serializzazione e la deserializzazione JSON (JavaScript Object Notation). JSON è uno standard aperto comunemente usato per la condivisione dei dati nel Web.
La serializzazione JSON serializza le proprietà pubbliche di un oggetto in una stringa, una matrice di byte o un flusso conforme alla specifica JSON RFC 8259. Per controllare il modo in cui JsonSerializer serializza o deserializza un'istanza della classe, è possibile usare uno o più degli approcci seguenti:
- Usare un JsonSerializerOptions oggetto
- Applicare attributi dallo spazio dei nomi System.Text.Json.Serialization alle classi o alle proprietà
- Personalizzare il contratto
- Implementare convertitori personalizzati
Serializzazione binaria e XML
Lo System.Runtime.Serialization spazio dei nomi contiene classi per la serializzazione binaria e XML e la deserializzazione.
Nella serializzazione binaria, tutti i membri, anche quelli di sola lettura, vengono serializzati e le prestazioni sono migliorate. La serializzazione XML offre codice più leggibile, oltre a una maggiore flessibilità di condivisione e utilizzo di oggetti a scopo di interoperabilità.
Avvertimento
La serializzazione binaria con BinaryFormatter può rappresentare un pericolo. Per altre informazioni, vedere la guida alla sicurezza BinaryFormatter e la guida alla migrazione di BinaryFormatter.
Rendere serializzabile un oggetto
Per serializzare un oggetto utilizzando la serializzazione binaria o XML, è necessario che l'oggetto venga serializzato, un flusso che contenga l'oggetto serializzato e un oggetto Formatter. System.Runtime.Serialization contiene le classi necessarie per serializzare e deserializzare gli oggetti.
Applicare l'attributo SerializableAttribute a un tipo per indicare che le istanze di questo tipo possono essere serializzate. Viene generata un'eccezione SerializationException se si tenta di serializzare ma il tipo non dispone dell'attributo SerializableAttribute .
Se non si vuole che un campo all'interno della classe sia serializzabile, applicare l'attributo NonSerializedAttribute . Se un campo di un tipo serializzabile contiene un puntatore, un handle o un'altra struttura di dati specifica di un determinato ambiente e il campo non può essere ricostituita in modo significativo in un ambiente diverso, è possibile renderlo nonerializzabile.
Se una classe serializzata contiene riferimenti a oggetti di altre classi contrassegnate SerializableAttribute, tali oggetti verranno serializzati anche.
Serializzazione binaria
La serializzazione binaria usa la codifica binaria per produrre serializzazione compatta per usi come flussi di rete basati su socket o archiviazione.
Serializzazione XML
La serializzazione XML serializza i campi pubblici e le proprietà di un oggetto o i parametri e restituisce i valori dei metodi in un flusso XML conforme a un documento XSD (XML Schema Definition Language) specifico. La serializzazione XML genera classi fortemente tipizzate con proprietà pubbliche e campi convertiti in XML. System.Xml.Serialization contiene le classi necessarie per la serializzazione e la deserializzazione di XML.
È possibile applicare attributi alle classi e ai membri della classe per controllare il modo in cui serializza XmlSerializer o deserializza un'istanza della classe .
Serializzazione di base e personalizzata
La serializzazione binaria e XML può essere eseguita in due modi, di base e personalizzati. La serializzazione di base usa .NET per serializzare automaticamente l'oggetto.
L'unico requisito della serializzazione di base è che l'oggetto ha l'attributo SerializableAttribute applicato. Può NonSerializedAttribute essere utilizzato per impedire la serializzazione di campi specifici.
Quando si usa la serializzazione di base, il controllo delle versioni degli oggetti può creare problemi, nel qual caso la serializzazione personalizzata può essere preferibile. La serializzazione di base è il modo più semplice per eseguire la serializzazione, ma non fornisce un controllo molto sul processo.
Nella serializzazione personalizzata è possibile specificare esattamente quali oggetti verranno serializzati e come verrà eseguita. La classe deve essere contrassegnata SerializableAttribute e implementare l'interfaccia ISerializable . Se si desidera che anche l'oggetto venga deserializzato in modo personalizzato, è necessario usare un costruttore personalizzato.
Serializzazione della finestra di progettazione
La serializzazione del progettista è una forma speciale di serializzazione che comporta il tipo di persistenza degli oggetti solitamente associata agli strumenti di sviluppo. La serializzazione della finestra di progettazione è il processo di conversione di un oggetto grafico in un file di origine che può essere usato in un secondo momento per recuperare l'oggetto grafico. Un file di origine può contenere codice, markup o persino informazioni sulla tabella SQL.
Articoli correlati
Procedura: Leggere i dati oggetto da un file XML (Visual Basic)
Illustra come leggere i dati oggetto scritti in precedenza in un file XML usando la XmlSerializer classe .
Procedura: Scrivere dati oggetto in un file XML (Visual Basic)
Illustra come scrivere l'oggetto da una classe in un file XML usando la XmlSerializer classe .