Instrucciones de la serialización
Debería considerar la serialización al diseñar las nuevas clases, porque una clase no se puede hacer serializable una vez que se ha compilado. Algunas preguntas para formular son: ¿Se necesita enviar esta clase a través de los dominios de aplicación? ¿Se utilizará esta clase como comunicación remota alguna vez? ¿Qué harán los usuarios con esta clase, derivarán una nueva clase que necesite ser serializada? En caso de duda, marque la clase como serializable. Es probablemente mejor marcar todas las clases como serializables a menos que cualquiera de lo siguiente sea verdad:
La clase nunca cruzará un dominio de aplicación. Si no se requiere la serialización y la clase necesita cruzar un dominio de aplicación, derive la clase de MarshalByRefObject.
La clase almacena punteros especiales que solo son aplicables a la instancia actual de la clase. Si una clase contiene memoria no administrada o identificadores de archivos, por ejemplo, asegúrese de que estos archivos se marcan con el atributo NonSerializedAttribute, o no serialice la clase en absoluto.
Los miembros de datos de clase contienen información confidencial. En este caso, es aconsejable marcar la clase como serializable, pero marcar los miembros de datos individuales que contienen información confidencial con el atributo NonSerializedAttribute. Otra alternativa es implementar la interfaz ISerializable y serializar solo los campos obligatorios.
Sea consciente de las implicaciones de seguridad de marcar una clase como serializable. Link Demand o Inheritance Demand para CodeAccessPermission en una clase o constructor de clase se puede omitir de forma predeterminada o serialización personalizada que implementa una demanda correspondiente para el mismo CodeAccessPermission. (Para obtener más información, vea la enumeración SecurityAction). Si una clase tiene Link Demand para un permiso, el tiempo de ejecución comprueba solo el llamador inmediato para comprobar que al llamador se le ha otorgado el permiso. El código de la biblioteca de clases de.NET Framework se firma con el nombre seguro de Microsoft y se le concede siempre plena confianza. Cualquier código puede utilizar un código que se permite plena confianza para omitir las comprobaciones de seguridad del tiempo vinculado. Por ejemplo, en el caso de serialización, un código dañino que no tenga el permiso de serialización necesario puede llamar a uno de los formateadores de .NET Framework de plena confianza, como BinaryFormattery omitir la comprobación de la petición de vínculo para el permiso.
Vea también
Otros recursos
Serialización binaria
Remote Objects
Serialización de SOAP y XML
Security and Serialization