Concetti relativi alla serializzazioneSerialization concepts

Perché utilizzare la serializzazione?Why would you want to use serialization? I due motivi principali sono la possibilità di rendere persistente lo stato di un oggetto su un supporto di archiviazione in modo da potere ricreare una copia esatta in una fase successiva e di inviare l'oggetto per valore da un dominio dell'applicazione a un altro.The two most important reasons are to persist the state of an object to a storage medium so an exact copy can be re-created at a later stage, and to send the object by value from one application domain to another. Ad esempio, la serializzazione viene utilizzata per salvare lo stato della sessione in ASP.NET e per copiare oggetti negli Appunti in Windows Form.For example, serialization is used to save session state in ASP.NET and to copy objects to the Clipboard in Windows Forms. Viene inoltre utilizzata da .NET Remoting per passare oggetti per valore da un dominio dell'applicazione a un altro.It is also used by remoting to pass objects by value from one application domain to another.

Avviso

La serializzazione binaria può rappresentare un pericolo.Binary serialization can be dangerous. Non deserializzare mai dati da un'origine non attendibile e non eseguire il round trip per i dati serializzati verso sistemi non sotto il proprio controllo.Never deserialize data from an untrusted source and never round-trip serialized data to systems not under your control.

Archiviazione permanentePersistent storage

Spesso risulta necessario archiviare il valore dei campi di un oggetto su disco e in un secondo momento recuperare tali dati.It is often necessary to store the value of the fields of an object to disk and then, later, retrieve this data. Sebbene ciò sia facilmente realizzabile senza basarsi sulla serializzazione, questo approccio è spesso scomodo e tendente all'errore e diviene sempre più complesso quando è necessario registrare una gerarchia di oggetti.Although this is easy to achieve without relying on serialization, this approach is often cumbersome and error prone, and becomes progressively more complex when you need to track a hierarchy of objects. Si provi a immaginare di dovere scrivere un'applicazione aziendale di grandi dimensioni contenente migliaia di oggetti e di dovere scrivere codice per salvare e ripristinare i campi e le proprietà su e da disco per ogni oggetto.Imagine writing a large business application, that contains thousands of objects, and having to write code to save and restore the fields and properties to and from disk for each object. La serializzazione fornisce un comodo meccanismo per raggiungere tale obiettivo.Serialization provides a convenient mechanism for achieving this objective.

Common Language Runtime gestisce il modo in cui gli oggetti vengono archiviati in memoria e fornisce un meccanismo di serializzazione automatizzato tramite l'uso della reflection.The common language runtime manages how objects are stored in memory and provides an automated serialization mechanism by using reflection. Quando un oggetto viene serializzato, il nome della classe, l'assembly e tutti i membri dati dell'istanza della classe vengono scritti nell'archiviazione.When an object is serialized, the name of the class, the assembly, and all the data members of the class instance are written to storage. Gli oggetti spesso archiviano riferimenti ad altre istanze nelle variabili membro.Objects often store references to other instances in member variables. Quando la classe viene serializzata, il motore di serializzazione registra oggetti a cui viene fatto riferimento, già serializzati, in modo da assicurare che lo stesso oggetto non venga serializzato più volte.When the class is serialized, the serialization engine tracks referenced objects, already serialized, to ensure that the same object is not serialized more than once. L'architettura di serializzazione fornito con .NET Framework correttamente gli handle di oggetti grafici e i riferimenti circolari automaticamente.The serialization architecture provided with the .NET Framework correctly handles object graphs and circular references automatically. L'unico requisito a cui devono attenersi gli oggetti grafici è che tutti gli oggetti, a cui viene fatto riferimento dall'oggetto serializzato, devono essere anche contrassegnati come Serializable (per altre informazioni, vedere Serializzazione di base).The only requirement placed on object graphs is that all objects, referenced by the serialized object, must also be marked as Serializable (for more information, see Basic Serialization). Se ciò non viene fatto, viene generata un'eccezione nel momento in cui il serializzatore tenta di serializzare l'oggetto non contrassegnato.If this is not done, an exception will be thrown when the serializer attempts to serialize the unmarked object.

Quando la classe serializzata viene deserializzata, la classe viene ricreata e i valori di tutti i membri dati vengono ripristinati automaticamente.When the serialized class is deserialized, the class is recreated and the values of all the data members are automatically restored.

Marshalling in base al valoreMarshal by value

Gli oggetti sono validi solo nel dominio dell'applicazione in cui sono stati creati.Objects are valid only in the application domain where they are created. Qualsiasi tentativo di passare l'oggetto come parametro o restituirlo come risultato non avrà esito positivo, a meno che l'oggetto non derivi da MarshalByRefObject o sia contrassegnato come Serializable.Any attempt to pass the object as a parameter or return it as a result will fail unless the object derives from MarshalByRefObject or is marked as Serializable. Se l'oggetto è contrassegnato come Serializable, l'oggetto sarà serializzato automaticamente, verrà trasportato da un dominio dell'applicazione all'altro e sarà successivamente deserializzato in modo da produrre una copia esatta dell'oggetto nel secondo dominio dell'applicazione.If the object is marked as Serializable, the object will automatically be serialized, transported from the one application domain to the other, and then deserialized to produce an exact copy of the object in the second application domain. Tale processo viene generalmente denominato marshalling in base al valore.This process is typically referred to as marshal-by-value.

Quando un oggetto deriva da MarshalByRefObject, viene passato un riferimento all'oggetto da un dominio dell'applicazione a un altro e non l'oggetto stesso.When an object derives from MarshalByRefObject, an object reference is passed from one application domain to another, rather than the object itself. È anche possibile contrassegnare un oggetto che deriva da MarshalByRefObject come Serializable.You can also mark an object that derives from MarshalByRefObject as Serializable. Se questo oggetto viene usato con i sevizi remoti, il formattatore responsabile della serializzazione, preconfigurato con un selettore di surrogati (SurrogateSelector), prende il controllo del processo di serializzazione e sostituisce tutti gli oggetti derivati da MarshalByRefObject con un proxy.When this object is used with remoting, the formatter responsible for serialization, which has been preconfigured with a surrogate selector (SurrogateSelector), takes control of the serialization process, and replaces all objects derived from MarshalByRefObject with a proxy. Senza SurrogateSelector, invece, l'architettura della serializzazione segue le regole della serializzazione standard descritte in Passaggi del processo di serializzazione.Without the SurrogateSelector in place, the serialization architecture follows the standard serialization rules described in Steps in the Serialization Process.

Serializzazione binariaBinary Serialization
Descrive il meccanismo della serializzazione binaria incluso nel Common Language Runtime.Describes the binary serialization mechanism that is included with the common language runtime.

Servizi remoti .NET\.NET Remoting\ Vengono descritti i diversi metodi di comunicazione disponibili in .NET Framework per le comunicazioni remote.Describes the various communications methods available in the .NET Framework for remote communications.

Serializzazione SOAP e XMLXML and SOAP Serialization
Descrive il meccanismo della serializzazione XML e SOAP incluso nel Common Language Runtime.Describes the XML and SOAP serialization mechanism that is included with the common language runtime.