Taller de certificación Internacional Tema: Serialización
Serialización de objetos Serialización XML Serialización Personalizada
Serialización de objetos La serialización es el proceso de convertir un objeto en una secuencia lineal de bytes que pueden ser almacenados o transferidos, la deserializacion es convertir esta secuencia en un objeto, esta implementada con System.Runtime.Serialization
Pasos para la serialización 1 Crear un stream donde se almacenará el objeto serializado 2 Crear un objeto Formmater (BinaryFormatter,SoapFormatter) 3 Llamar al objeto Formmater para Serializar
Ejemplo de serialización
Pasos para la deserialización 1 Crear un stream para leer el objeto serializado 2 Crear un objeto Formmater. 3 Crear un objeto para almacenar el objeto deserializado 4 Llamar al objeto formater para deserializar
Ejemplo de deserialización
Serializar una clase Para que una clase sea serializable, se debe agregar el atributo [Serializable] y esto serializa todo, incluso miembros privados. Si se desea que uno de los atributos no sea serializable, se le coloca al costado [NonSerialized] . El atributo [OptionalField] se usa para mantener la compatibilidad en la deserialización. Este campo afecta solo la deserialización para prevenir que en runtime se lance una excepción si el miembro no está presente en el dato serializado.
Serializar una clase
Serializar una clase Tambien se puede usar la interfaz IDeserializationCallback para ara habilitar que la clase inicialize campos no serializados implementa esta interfaz, deberá implementar el método public void OnDeserialization(object sender)
Serializar una clase
Formatos de Serialización IFormatter: Deberá implementarse cuando se requiere un control total sobre la Serialización. BinaryFormatter: Es el mas eficiente al serializar,debe usarse si las aplicaciones son .NET, requiere menos espacio. SoapFormatter: Localizada en System.Runtime.Serialization.Formatters.Soap, esta basado en XML, útil para transmitir en redes o aplicaciones, o en el intercambio de información, requiere mas espacio. Debe agregar la referencia System.Runtime.Serialization.Formatters.Soap.Dll
Formatos de serializacion: SoapFormatter
Serialización Serialización XML Serialización de objetos Serialización Personalizada
Serialización XML Las serializacion XML, es útil cuando se necesita intercambiar datos con diversas aplicaciones y no se necesita serializar datos privados. La serializacion XML no serializa miembros privados o protected. A diferencia de la serializacion estándar la clases no deben tener el atributo [Serializable]
Porque usa la serializacion XML? La serializacion en XML es usada cuando se necesita intercambiar un objeto con una aplicación que no esté basada en el framework .Net. Beneficios: Gran interoperabilidad: XML está basado en archivos estándares, y existen muchas librerías para que cualquier aplicación de diferentes sistemas operativos lo pueda usar. Una administración más amigable: puede ser editado desde cualquier editor de texto. Provee archivos más fáciles de leer: se describe por sí solo. Solo puede serializar datos públicos, no privados, No se pueden serializar grafos.
Pasos para la serialización 1 Crear un stream,textwriter,xmlwriter 2 Crear un XmlSerializer(typeof(tipo)) 3 Llamar al objeto XmlSerializer.Serialize(intancia)
Pasos para la deserialización 1 Crear un stream,textreader,xmlreader 2 Crear un objeto XmlSerializer(typeof(tipo)) 3 Llamar a xmlSerializer.Deserialize(tipo)
Ejemplo de serialización XML
Ejemplo de serializacion XML
Serialización XML de una clase Se debe especificar la clase como pública. Definir todos los miembros que se desean deserializar como públicos. Crear un constructor sin parámetros la clase no necesita tener el atributo “Serializable” para poder ser serializado como XML. Una clase que no tiene ningún atributo para la serialización en XML, se serializaría a XML donde cada uno de sus miembros es un elemento XML.
Serialización XML de una clase Atributos usados en la serialización XML: XmlAttribute: permite que el campo, se vuelva un atributo en el momento de la serializacion, es decir estará de la siguiente forma XmlIgnore: permite ignorar un atributo para que no sea serializado (como [NonSerialized]). XmlRoot: ("nombre"), sirve para especificar con otro nombre serializado a la clase que se piensa serializar.
Serialización XML de una clase
Serialización Personalizada Serialización de objetos Serialización XML Serialización Personalizada
Serialización personalizada Cuando se desea hacer una serialización customizada, se debe de implementar la interfaz ISerializable, el método GetObjectData, además un constructor para el proceso de serialización con los parámetros: SerializationInfo info, StreamingContext context. Del SerializationInfo (es de donde se obtienen los datos de la forma info.GetInt32("numero"))