Linee guida 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. In caso esistano dubbi quando ci si chiede se sarà necessario inviare la classe in più domini di applicazione, se la classe verrà mai utilizzata con .NET Remoting, come verrà utilizzata o se è possibile che gli utenti derivino dalla classe una nuova classe che deve essere anch'essa serializzata, è consigliabile contrassegnare la classe come serializzabile. È preferibile contrassegnare tutte le classi come serializzabili a meno che non sia vera una delle condizioni seguenti:
La classe non opererà mai oltre i limiti di un dominio di applicazione. Se la serializzazione non è necessaria e la classe deve essere utilizzata oltre i limiti di un dominio di applicazione, derivare la classe da MarshalByRefObject.
Nella classe sono archiviati puntatori speciali applicabili solo all'istanza corrente della classe. Se la classe contiene memoria non gestita o handle di file, ad esempio, assicurarsi che questi file siano contrassegnati con l'attributo NonSerializedAttribute 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 con l'attributo NonSerializedAttribute. Un'alternativa consiste nell'implementare l'interfaccia ISerializable e serializzare solo i campi richiesti.
Si tenga conto delle implicazioni a livello di protezione che presenta la scelta di rendere una classe serializzabile. Un attributo Link Demand o Inheritance Demand per ottenere un permesso CodeAccessPermission in una classe o in un costruttore di classe può essere ignorato dalla serializzazione predefinita o personalizzata che implementa una corrispondente richiesta dello stesso CodeAccessPermission. Per ulteriori informazioni, vedere l'enumerazione SecurityAction. Se una classe presenta un attributo Link Demand 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 dispone sempre di attendibilità totale. Qualsiasi codice può utilizzare codice che dispone di attendibilità totale per aggirare i controlli di protezione in fase di collegamento. Nel caso della serializzazione, ad esempio, con un malware che non dispone delle autorizzazioni di serializzazione necessarie è possibile chiamare uno dei formattatori completamente attendibili di .NET Framework, ad esempio BinaryFormatter, e aggirare il controllo di autorizzazione della richiesta di collegamento.
Vedere anche
Concetti
Altre risorse
Serializzazione binaria
Oggetti remoti
Serializzazione XML e SOAP