Indicazioni per la serializzazione
È consigliabile prendere in considerazione l'utilizzo della serializzazione quando si progettano nuove classi, in quanto una classe non può essere serializzata dopo la compilazione. Alcune domande che è opportuno porsi sono: è necessario inviare la classe in più domini applicazione? La classe verrà mai utilizzata con i servizi remoti? Come verrà utilizzata la classe? È possibile che gli utenti derivino dalla classe una nuova classe che deve essere anch'essa serializzata? In caso di dubbio, contrassegnare la classe come serializzabile. È preferibile contrassegnare tutte le classi come serializzabili a meno che non sia vera una delle seguenti condizioni:
- La classe non opereranno mai oltre i limiti di un dominio applicazione. Se la serializzazione non è richiesta e la classe deve essere utilizzata oltre i limiti del dominio applicazione, derivare la classe da MarshalByRefObject.
- Nella classe sono archiviati puntatori speciali che possono essere applicati solo all'istanza corrente della classe. Se la classe contiene memoria non gestita o handle di file, ad esempio, accertarsi che questi file siano contrassegnati come NonSerialized oppure non serializzare affatto la classe.
- Alcuni dei membri dati contengono informazioni riservate. In questo caso è consigliabile contrassegnare la classe come serializzabile e i singoli membri dati che contengono informazioni riservate come NonSerialized. Un'alternativa consiste nell'implementare l'interfaccia ISerializable e serializzare solo i campi richiesti.
Si tenga conto delle implicazioni di protezione che presenta la scelta di rendere una classe serializzabile. Una richiesta di collegamento o una richiesta di ereditarietà per un CodeAccessPermission su una classe o un costruttore di una classe può essere aggirata da una serializzazione predefinita o personalizzata che implementi una richiesta corrispondente per lo stesso CodeAccessPermission. Se una classe presenta una richiesta di collegamento per una autorizzazione, il runtime controllerà solo il chiamante immediato per verificare che disponga dell'autorizzazione. Il codice della libreria di classi di .NET Framework è firmato con nome sicuro Microsoft e gode sempre di autorizzazioni di attendibilità completa. Qualsiasi codice può utilizzare codice che dispone di autorizzazioni di attendibilità completa per aggirare i controlli di protezione nella fase di collegamento. Nel caso della serializzazione, ad esempio, con codice dannoso che non dispone delle autorizzazioni di serializzazione richieste è possibile chiamare uno dei formattatori ad attendibilità completa di .NET Framework, quale BinaryFormatter, e aggirare il controllo di autorizzazione della richiesta di collegamento.
Vedere anche
Serializzazione binaria | Accesso a oggetti in altri domini applicazione mediante .NET Remoting | Serializzazione XML e SOAP | Protezione e serializzazione