Compartir a través de


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é haran 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 sólo 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 sólo los campos obligatorio.

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 sólo 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.

Consulte también

Otros recursos

Serialización binaria
Remote Objects
Serialización de SOAP y XML
Security and Serialization

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.