Condividi tramite


Linee guida relative alla serializzazione

È consigliabile prendere in considerazione la serializzazione durante la progettazione di nuove classi, poiché non è possibile rendere serializzabile una classe dopo la sua compilazione. Alcune delle domande da porsi sono: Questa classe dovrà essere inviata attraverso domini dell'applicazione? Questa classe sarà mai utilizzata con .NET Remoting? Cosa faranno gli utenti con questa classe? Potrebbero avere bisogno di derivare una nuova classe dalla mia che necessita di essere serializzata? In caso di dubbi, contrassegnare la classe come serializzabile. Probabilmente è meglio contrassegnare tutte le classi come serializzabili a meno che una delle seguenti condizioni non sia vera:

  • La classe non attraverserà mai un dominio dell'applicazione. Se la serializzazione non è necessaria e la classe ha bisogno di attraversare un dominio dell'applicazione, derivare la classe da MarshalByRefObject.

  • La classe archivia puntatori speciali che sono applicabili solo all'istanza corrente della classe. Se ad esempio una classe contiene handle di memoria o di file non gestiti, accertarsi che tali file siano contrassegnati con l'attributo NonSerializedAttribute altrimenti non serializzare affatto la classe.

  • I membri dati della classe contengono informazioni riservate. In tal caso, è consigliabile contrassegnare la classe come serializzabile ma contrassegnare i singoli membri dati che contengono informazioni riservate con l'attributo NonSerializedAttribute. Un'altra alternativa è implementare l'interfaccia ISerializable e serializzare solo i campi obbligatori.

È necessario essere consapevoli delle implicazioni di sicurezza che derivano dal contrassegnare una classe come serializzabile. Un Link Demand o un Inheritance Demand per un CodeAccessPermission su una classe o su un costruttore della classe possono essere ignorati da una serializzazione predefinita o personalizzata che implementi una richiesta corrispondente per lo stesso CodeAccessPermission. Per ulteriori informazioni, vedere l'enumerazione SecurityAction. Se una classe dispone di un Link Demand per un'autorizzazione, il runtime controlla solo il chiamante immediato per verificare che al chiamante sia stata concessa l'autorizzazione. Il codice della libreria di classi .NET Framework è firmato con il nome sicuro Microsoft e ad esso è sempre concessa attendibilità totale. Qualsiasi codice può utilizzare codice con attendibilità totale per ignorare i controlli di sicurezza in fase di collegamento. Ad esempio, nel caso della serializzazione, del codice dannoso che non dispone dell'autorizzazione di serializzazione richiesta può chiamare uno dei formattatori.NET Framework con attendibilità totale, ad esempio BinaryFormatter e ignorare il controllo della richiesta di collegamento per l'autorizzazione.

Vedere anche

Altre risorse

Serializzazione binaria
Remote Objects
Serializzazione SOAP e XML
Security and Serialization