¿Qué es [Serializable] y cuándo debo usarlo?

Resuelto kevin asked hace 13 años • 7 respuestas

Descubrí que algunas clases usan el [Serializable]atributo.

  • ¿Qué es?
  • ¿Cuándo debo usarlo?
  • ¿Qué tipo de beneficios obtendré?
kevin avatar May 04 '11 09:05 kevin
Aceptado

¿Qué es?

Cuando crea un objeto en una aplicación .Net Framework, no necesita pensar en cómo se almacenan los datos en la memoria. Porque .Net Framework se encarga de eso por usted. Sin embargo, si desea almacenar el contenido de un objeto en un archivo, enviar un objeto a otro proceso o transmitirlo a través de la red, debe pensar en cómo se representa el objeto porque necesitará convertirlo a un formato diferente. . Esta conversión se llama SERIALIZACIÓN.

Usos de la serialización

La serialización permite al desarrollador guardar el estado de un objeto y recrearlo según sea necesario, proporcionando almacenamiento de objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como enviar el objeto a una aplicación remota mediante un servicio web, pasar un objeto de un dominio a otro, pasar un objeto a través de un firewall como una cadena XML o mantener la seguridad o la información específica del usuario. información entre aplicaciones.

Aplicar SerializableAttributea un tipo para indicar que las instancias de este tipo se pueden serializar. Aplique SerializableAttributeincluso si la clase también implementa la ISerializableinterfaz para controlar el proceso de serialización.

Todos los campos públicos y privados de un tipo marcados con se SerializableAttributeserializan de forma predeterminada, a menos que el tipo implemente la ISerializableinterfaz para anular el proceso de serialización. El proceso de serialización predeterminado excluye los campos marcados con NonSerializedAttribute. Si un campo de tipo serializable contiene un puntero, un identificador o alguna otra estructura de datos que es específica de un entorno particular y no se puede reconstituir de manera significativa en un entorno diferente, es posible que desee aplicarlo NonSerializedAttributea ese campo.

Consulte MSDN para obtener más detalles.

Editar 1

Alguna razón para no marcar algo como serializable

Al transferir o guardar datos, debe enviar o guardar solo los datos requeridos. Por lo tanto, habrá menos retrasos en las transferencias y problemas de almacenamiento. Por lo tanto, puede optar por no recibir fragmentos de datos innecesarios al serializar.

CharithJ avatar May 04 '2011 02:05 CharithJ

Dado que la pregunta original era sobre SerializableAttribute, cabe señalar que este atributo solo se aplica cuando se utiliza BinaryFormatter o SoapFormatter.

Es un poco confuso, a menos que realmente prestes atención a los detalles, en cuanto a cuándo usarlo y cuál es su propósito real.

No tiene NADA que ver con la serialización XML o JSON.

Con SerializableAttribute se utilizan la interfaz ISerializable y la clase SerializationInfo. Estos también solo se usan con BinaryFormatter o SoapFormatter.

A menos que tenga la intención de serializar su clase usando Binary o Soap, no se moleste en marcar su clase como [Serializable]. Los serializadores XML y JSON ni siquiera son conscientes de su existencia.

BLaminack avatar Jun 22 '2018 15:06 BLaminack

Algunos usos prácticos del [Serializable]atributo:

  • Guardar el estado del objeto mediante serialización binaria; puede "guardar" muy fácilmente instancias de objetos completas en su aplicación en un archivo o flujo de red y luego recrearlas deserializando; consulte la BinaryFormatterclase en System.Runtime.Serialization.Formatters.Binary
  • Escribir clases cuyas instancias de objetos se pueden almacenar en el portapapeles usando Clipboard.SetData(): las clases no serializables no se pueden colocar en el portapapeles.
  • Escribir clases que sean compatibles con .NET Remoting; generalmente, cualquier instancia de clase que pase entre dominios de aplicación (excepto aquellas que se extienden desde MarshalByRefObject) debe ser serializable.

Estos son los casos de uso más comunes con los que me he encontrado.

Bradley Smith avatar May 04 '2011 03:05 Bradley Smith

La serialización es el proceso de convertir un objeto en un flujo de bytes para almacenarlo o transmitirlo a la memoria, una base de datos o un archivo.

Cómo funciona la serialización

Esta ilustración muestra el proceso general de serialización:

ingrese la descripción de la imagen aquí

El objeto se serializa en una secuencia que transporta los datos. La secuencia también puede tener información sobre el tipo de objeto, como su versión, cultura y nombre del ensamblado. A partir de esa secuencia, el objeto se puede almacenar en una base de datos, un archivo o la memoria.

Detalles en Microsoft Docs .

Mahbubur Rahman avatar Jan 05 '2017 17:01 Mahbubur Rahman