Risposte:
Quando si crea un oggetto in un'applicazione framework .Net, non è necessario pensare a come i dati vengono archiviati in memoria. Perché .Net Framework si occupa di questo per te. Tuttavia, se si desidera archiviare il contenuto di un oggetto in un file, inviare un oggetto a un altro processo o trasmetterlo attraverso la rete, è necessario pensare a come viene rappresentato l'oggetto perché sarà necessario convertirlo in un formato diverso . Questa conversione si chiama SERIALIZZAZIONE.
La serializzazione consente allo sviluppatore di salvare lo stato di un oggetto e ricrearlo secondo necessità, fornendo la memorizzazione degli oggetti e lo scambio di dati. Tramite la serializzazione, uno sviluppatore può eseguire azioni come l'invio di un 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 il mantenimento di sicurezza o specifici dell'utente informazioni tra le applicazioni.
Applica SerializableAttribute
a un tipo per indicare che è possibile serializzare istanze di questo tipo. Applicare SerializableAttribute
anche se la classe implementa anche l' ISerializable
interfaccia per controllare il processo di serializzazione.
Tutti i campi pubblici e privati in un tipo contrassegnato da SerializableAttribute
sono serializzati per impostazione predefinita, a meno che il tipo non implementi l' ISerializable
interfaccia per sovrascrivere il processo di serializzazione. Il processo di serializzazione predefinito esclude i campi contrassegnati con NonSerializedAttribute
. Se un campo di un tipo serializzabile contiene un puntatore, un handle o qualche altra struttura di dati specifica per un determinato ambiente e che non può essere ricostituita in modo significativo in un ambiente diverso, è possibile che si desideri applicare NonSerializedAttribute
a quel campo.
Vedi MSDN per maggiori dettagli.
Modifica 1
Qualsiasi motivo per non contrassegnare qualcosa come serializzabile
Quando si trasferiscono o si salvano dati, è necessario inviare o salvare solo i dati richiesti. Quindi ci saranno meno ritardi di trasferimento e problemi di archiviazione. Pertanto, durante la serializzazione è possibile escludere inutili blocchi di dati.
Alcuni usi pratici per l' [Serializable]
attributo:
BinaryFormatter
classe in System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
- le classi non serializzabili non possono essere inserite negli appunti.MarshalByRefObject
) deve essere serializzabile.Questi sono i casi di utilizzo più comuni che ho riscontrato.
Poiché la domanda originale riguardava SerializableAttribute, è necessario notare che questo attributo si applica solo quando si utilizza BinaryFormatter o SoapFormatter.
È un po 'confuso, a meno che tu non presti davvero attenzione ai dettagli, su quando usarlo e qual è il suo scopo reale.
Non ha nulla a che fare con la serializzazione XML o JSON.
Utilizzati con SerializableAttribute sono l'interfaccia ISerializable e la classe SerializationInfo. Questi sono anche usati solo con BinaryFormatter o SoapFormatter.
A meno che tu non intenda serializzare la tua classe utilizzando Binary o Soap, non preoccuparti di contrassegnare la tua classe come [Serializable]. I serializzatori XML e JSON non sono nemmeno consapevoli della sua esistenza.
Serializable
e senza quando l'attributo è stato rimosso. Quindi alcune interferenze sono possibili.
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.
Come funziona la serializzazione
Questa illustrazione mostra l'intero processo di serializzazione.
L'oggetto è serializzato su un flusso, che trasporta non solo i dati, ma le informazioni sul tipo di oggetto, come la sua versione, cultura e nome dell'assembly. Da quel flusso, può essere archiviato in un database, un file o memoria.
Ecco un breve esempio di come funziona la serializzazione. Stavo anche imparando lo stesso e ho trovato utili due link. Che cos'è la serializzazione e come può essere eseguita in .NET .
Un programma di esempio che spiega la serializzazione
Se non capisci il programma di cui sopra, qui viene fornito un programma molto semplice con una spiegazione .
serializzazione
La serializzazione è il processo di conversione di un oggetto o di un insieme di oggetti grafico in un flusso, è un array di byte nel caso della serializzazione binaria
Usi di serializzazione
Di seguito sono riportati alcuni utili attributi personalizzati che vengono utilizzati durante la serializzazione di un oggetto
[Serializzabile] -> Viene utilizzato quando contrassegniamo la serializzazione di un oggetto [Non serializzato ] -> Viene utilizzato quando non si desidera serializzare il campo di un oggetto. [OnSerializing] -> Viene utilizzato quando si desidera eseguire alcune azioni durante la serializzazione di un oggetto [OnSerialized] -> Viene utilizzato quando si desidera eseguire alcune azioni dopo aver serializzato un oggetto in streaming.
Di seguito è riportato l'esempio di serializzazione
[Serializable]
internal class DemoForSerializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializable demo)
{
DemoForSerializable objSer = new DemoForSerializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnSerializing]
private void OnSerializing(StreamingContext context) {
Fname = "sheo";
Lname = "Dayal";
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Do some work after serialized object
}
}
Ecco il codice chiamante
class Program
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializable demo = new DemoForSerializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean