Vous êtes sur la page 1sur 8

SERIALIZACIN EN C#

INTRODUCCION La necesidad de la serializacin se ha venido dando implcitamente mediante la utilizacin de protocolos como RMI, no obstante, existen mltiples campos, en el que resulta de vital importancia, ya que es el principio bsico de la programacin distribuida. Una vez introducidos los conceptos bsicos sobre serializacin, se va a describir el proceso de serializacin, con una breve explicacin de las clases e interfaces que son utilizadas para este propsito; posteriormente se realiza una rpida pero concisa explicacin de la serializacin en XML.
Serializacin es el proceso de leer o almacenar un objeto en un archivo. Para serializar un objeto se requiere. Un objeto CFile que represente el archivo. Un Objeto CArchive que ofrece un entorno para la serializacin. El objeto a ser serial izado.

OBJETIVOS DE LA TECNOLOGIA PRINCIPAL Proporcionar un mecanismo mediante el cual se puedan realizar aplicaciones distribuidas, sin importar el hardware ni en software. SECUNDARIOS Permitir que procedimientos u objetos puedan ser transmitidos como argumento o como resultado de un RMI. Reutilizar cdigo para diferentes plataformas. Facilitar al programador herramientas poderosas que se encuentran en diferentes mquinas. Para mantener el estado de un objeto en un medio de almacenamiento y recrear una copia exacta en una fase posterior y para enviar el objeto por valor desde el dominio de una aplicacin a otro. La serializacin es el proceso de convertir un objeto de forma que pueda transportarse fcilmente. Por ejemplo, puede serializar un objeto y transportarlo por Internet utilizando HTTP entre un cliente y un servidor. En el otro extremo, la deserializacin reconstruye el objeto a partir de la secuencia.

La serializacin XML slo serializa los campos pblicos y los valores de propiedad de un objeto en una secuencia XML. La clase central de la serializacin XML es XmlSerializer y sus mtodos ms importantes son Serialize y Deserialize. Los datos de los objetos se describen utilizando construcciones de lenguaje de programacin como clases, campos, propiedades, tipos primitivos, matrices e incluso XML incrustado en forma de objetos XmlElement o XmlAttribute. Puede crear clases propias, anotadas con atributos, o utilizar la herramienta Definicin de esquemas XML para generar las clases de acuerdo con un esquema XML existente. Proteger aplicaciones que utilizan la clase XmlSerializer Al crear una aplicacin que utiliza la clase XmlSerializer, debe tener en cuenta los siguientes elementos y sus implicaciones:

La clase XmlSerializer crea archivos de C# (archivos .cs) y los compila en archivos .dll en el directorio especificado por la variable de entorno TEMP; la serializacin se produce con esos archivos DLL. El cdigo y los archivos DLL son vulnerables a un proceso malicioso en el momento de la creacin y de la compilacin. XmlSerializer. En este caso, un usuario puede poner en peligro la seguridad del equipo si reemplaza el archivo .cs o el archivo .dll compilado. Para eliminar este problema, compruebe siempre que cada cuenta del equipo tiene su propio perfil. Si es as, la variable de entorno TEMP sealar, de forma predeterminada, a un directorio diferente para cada cuenta.

Si un usuario malintencionado enva una secuencia continua de datos XML a un servidor Web (ataque de denegacin de servicio), entonces la clase XmlSerializer seguir procesando datos hasta que el equipo no disponga de suficientes recursos. La clase XmlSerializer serializa los datos y ejecuta cualquier cdigo que utilice el tipo proporcionado. Hay dos casos en los que un objeto malicioso representa una amenaza. Si puede ejecutar cdigo malicioso o puede insertar cdigo malicioso en el archivo de C# creado con la clase XmlSerializer. En el primer caso, si un objeto malicioso intenta ejecutar un procedimiento destructivo, la seguridad de acceso a cdigo ayudar a impedir que se causen daos. En el segundo caso, existe la posibilidad hipottica de que un objeto malicioso inserte de alguna manera cdigo en el archivo C# creado mediante la clase XmlSerializer. Aunque este problema se ha examinado a fondo y este tipo de ataque se considera poco probable, se debe tomar la precaucin de no serializar nunca los datos con un tipo desconocido o que no sea de confianza.

Los datos confidenciales serializados pueden ser vulnerables. Una vez que la clase XmlSerializer ha serializado los datos, se pueden guardar en un archivo XML u otro almacn de datos. Si el almacn de datos est disponible

para otros procesos, o est visible en una intranet o en Internet, los datos pueden ser robados y se pueden utilizar con malas intenciones. Por ejemplo, los datos de una aplicacin que serializa pedidos que incluyen nmeros de tarjetas de crdito son extremadamente confidenciales. Para ayudar a evitarlo, proteja siempre el almacn de datos y tome las medidas oportunas para mantenerlo privado. Serializar y deserializar objetos Para serializar un objeto, primero cree el objeto que se va a serializar y establezca sus propiedades y campos pblicos. Para ello, debe determinar el formato de transporte en el que se almacenar la secuencia XML (como secuencia o como archivo). Por ejemplo, si la secuencia XML debe guardarse de forma permanente, cree un objeto FileStream. Cuando deserializa un objeto, el formato de transporte determina si se crear un objeto de secuencia o de archivo. Una vez determinado el formato de transporte, puede llamar a los mtodos Serialize o Deserialize, segn corresponda. Para serializar un objeto 1. Cree el objeto y establezca sus campos y propiedades pblicos. 2. Construya un XmlSerializer con el tipo del objeto. 3. Llame al mtodo Serialize para generar una secuencia XML o una representacin de archivo de los campos y propiedades pblicos del objeto. Para deserializar un objeto
1. 2.

Construya un XmlSerializer con el tipo del objeto que se va a deserializar. Llame al mtodo Deserialize para producir un replicado del objeto. Al deserializar, debe convertir el objeto devuelto al tipo del original,

Serializacin de una clase simple En el ejemplo siguiente se muestra una clase simple con un campo pblico: Public Class OrderForm Public OrderDate As DateTime End Class Cuando se serializa una instancia de esta clase, puede parecerse a lo siguiente: <OrderForm> <OrderDate>12/12/01</OrderDate>
</OrderForm>

Atributos que controlan la serializacin XML Los elementos siguientes pueden serializarse utilizando la clase XmLSerializer. Propiedades pblicas de lectura y escritura, y campos de clases pblicas

Clases que implementan ICollection o IEnumerable (tenga en cuenta que slo se serializan las colecciones, no las propiedades pblicas) Objetos XmlElement Objetos XmlNode Objetos DataSet Para serializar un objeto Cree el objeto y establezca sus campos y propiedades pblicos. Construya un XmlSerializer con el tipo del objeto. Para obtener ms informacin, vea los constructores de la clase XmlSerializer. Llame al mtodo Serialize para generar una secuencia XML o una representacin de archivo de los campos y propiedades pblicos del objeto. En el ejemplo siguiente se crea un archivo. [C#] MySerializableClass myObject = new MySerializableClass(); // Insert code to set properties and fields of the object. XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass)); // To write to a file, create a StreamWriter object. StreamWriter myWriter = new StreamWriter("myFileName.xml"); mySerializer.Serialize(myWriter, myObject); Para deserializar un objeto Construya un XmlSerializer con el tipo del objeto que se va a deserializar. Llame al mtodo Deserialize para producir un replicado del objeto. Al deserializar, debe convertir el objeto devuelto al tipo del original, como se muestra a continuacin. En el ejemplo siguiente se deserializa el objeto en un archivo, aunque tambin puede deserializarse en una secuencia. [C#] MySerializableClass myObject; // Constructs an instance of the XmlSerializer with the type // of object that is being deserialized. XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass)); // To read the file, creates a FileStream. FileStream myFileStream = new FileStream("myFileName.xml", FileMode.Open); // Calls the Deserialize method and casts to the object type. myObject = (MySerializableClass)mySerializer.Deserialize(myFileStream);

Consideraciones de la serializacin XML Al utilizar la clase XmLSerializer debe considerarse lo siguiente:

Los datos serializados contienen nicamente los datos y la estructura de las clases. No incluyen ni la identidad de tipo ni la informacin de ensamblado. Slo se pueden serializar los campos y propiedades pblicos. Si necesita serializar datos que no sean pblicos, utilice la clase BinaryFormatter en lugar de la serializacin XML. Una clase debe tener un constructor predeterminado para que XmlSerializer la serialice. Atributos que controlan la serializacin XML Puede aplicar los atributos de la tabla siguiente a clases y miembros de clase para controlar la forma en que XmlSerializer serializa o deserializa una instancia de la clase.

Atributo XmlAnyAttributeAttribute

Se aplica a Campo pblico, propiedad, parmetro o valor devuelto que devuelve una matriz de objetos XmlAttribute. Campo pblico, propiedad, parmetro o valor devuelto que devuelve una matriz de objetos XmlElement. Campo pblico, propiedad, parmetro o valor devuelto que devuelve una matriz de objetos complejos. Campo pblico, propiedad, parmetro o valor devuelto que devuelve una matriz de objetos complejos. Parmetro, propiedad, campo pblico o valor devuelto. Parmetro, propiedad, campo pblico o valor devuelto. Parmetro, propiedad, campo pblico o valor devuelto. Campo pblico que es un identificador de enumeracin. Campos y propiedades pblicos.

XmlAnyElementAttribute

XmlArrayAttribute

Especifica Al deserializar, la matriz se rellenar con objetos XmlAttribute que representan a todos los atributos XML desconocidos para el esquema. Al deserializar, la matriz se rellenar con objetos XmlElement que representan a todos los elementos XML desconocidos para el esquema. Los miembros de la matriz se generarn como miembros de una matriz XML. Los tipos derivados que pueden insertarse en una matriz. Normalmente se aplica junto con XmlArrayAttribute. El miembro se serializar como un atributo XML. Se puede eliminar la ambigedad del miembro mediante una enumeracin. El campo o la propiedad se serializar como un elemento XML. Nombre de elemento de un miembro de enumeracin. Cuando se serializa la clase contenedora, debe omitirse el campo o la propiedad. La clase debe incluirse al generar esquemas de modo que sea reconocida durante la serializacin.

XmlArrayItemAttribute

XmlAttributeAttribute XmlChoiceIdentifierAttribute XmlElementAttribute XmlEnumAttribute XmlIgnoreAttribute XmlIncludeAttribute

XmlRootAttribute

XmlTextAttribute XmlTypeAttribute

Declaraciones de clases derivadas y pblicas as como valores devueltos de mtodos pblicos (para documentos del Lenguaje de descripcin de servicios Web (WSDL)). Declaraciones de clase Controla la serializacin XML pblica. del atributo de destino como un elemento raz XML. Utilice el atributo para especificar ms detalladamente el espacio de nombres y el nombre de elemento. Campos y propiedades El campo o la propiedad debe pblicos. serializarse como texto XML. Declaraciones de clase El nombre y el espacio de pblica. nombres del tipo XML.

Adems de estos atributos, que se encuentran en el espacio de nombres System.Xml.Serialization, tambin puede aplicar el atributo

Controlar la serializacin XML mediante atributos Los atributos se pueden utilizar para controlar la serializacin XML de un objeto o para crear una secuencia XML alternativa a partir del mismo conjunto de clases. Para obtener ms detalles sobre cmo crear una secuencia XML alternativa El comportamiento predeterminado se puede cambiar si se asigna un nombre nuevo al elemento. En el cdigo siguiente se muestra la forma en que un atributo establece la propiedad ElementName de un XmlElementAttribute para conseguir esto. [Visual Basic] Public Class TaxRates < XmlElement(ElementName = "TaxRate")> _ Public ReturnTaxRate As Decimal End Class [C#] public class TaxRates{ [XmlElement(ElementName = "TaxRate")] public decimal ReturnTaxRate; } Para obtener ms informacin acerca de los atributos, vea Extender metadatos mediante atributos. Para obtener una lista de los atributos que controlan la serializacin XML, vea Atributos que controlan la serializacin. Para controlar la serializacin con atributos 1. Aplique uno de los atributos especiales a la clase o al miembro de la clase. Para obtener una lista de los atributos que controlan especficamente la serializacin, 2. Modifique el miembro de la clase, si es necesario. Por ejemplo, cambie el nombre de un miembro, pero establezca un valor apropiado en la propiedad ElementName. Un valor apropiado es aqul que se ajusta al esquema XML (XSD) del objeto serializado. 3. Serialice o deserialice la instancia de clase. Ventajas de utilizar la serializacin XML La clase XmlSerializer ofrece un control total y flexible al serializar un objeto como XML. Si est creando un servicio Web XML, puede aplicar atributos que controlen la serializacin para clases y miembros a fin de garantizar que el resultado XML se ajuste a un esquema especfico. Por ejemplo, XmlSerializer permite:

Especificar si un campo o una propiedad debe codificarse como un atributo o un elemento. Especificar el espacio de nombres XML que se va a utilizar. Especificar el nombre de un elemento o atributo si un nombre de campo o de propiedad es inapropiado.

Otra de las ventajas de la serializacin XML es que no tiene restricciones en las aplicaciones que se desarrollen, siempre que la secuencia XML que se genere se ajuste a un esquema determinado. Imagine un esquema utilizado para describir libros (incluye un

elemento de ttulo, autor, editor y nmero ISBN). Puede desarrollar una aplicacin que procese los datos XML del modo que desee (por ejemplo, como pedido o como inventario de libros). En cualquier caso, el nico requisito es que la secuencia XML se ajuste al esquema de lenguaje XSD especificado.

Vous aimerez peut-être aussi