Curiosidades. Serialización en Compact Framework.

  Como algunos ya sabreis, serializar un objeto en Compact Framework se realiza de forma idéntica a como lo podamos conseguir con las librerías del Framework. Pero ¿alguno habeis analizado el xml resultante de la clase serializada? ¿habeis notado algo estraño?.

  Vamos a poner un ejemplillo muy usual ( código en C# ) . Tenemos la clase "Configuracion.cs" tal que:

public class Configuracion
    {
        public string IP;
        public string directorio_local;

        public Configuracion() { }
        
        public Configuracion(string IP, string directorio_local)
        {
            this.IP = IP;
            this.directorio_local = directorio_local;
        }
    }

   Desde nuestro programa principal, en la sección que deseemos, serializamos dicha entidad de la siguiente manera (todo esto, del mismo modo para el Compact Framework y Framework):

XmlSerializer serializador = new XmlSerializer(typeof(Configuracion));

string path_destino = "./config.xml";

/*Para CompactFramework, usaremos:

* string path_destino = GetAppPath()+ "config.xml";

Ver al final del artículo dicha función*/

StreamWriter writer = new StreamWriter(path_destino);

Configuracion config=new Configuracion("192.168.0.2","directorio_prueba");

serializador.Serialize(writer, config);

Console.WriteLine("Configuración serializada");

Si ahora nos vamos al directorio del ensamblado de la aplicación, encontraremos el archivo ‘config.xml’. Veamos los resultados:

Framework:

<?xml version="1.0" encoding="utf-8"?>

<Configuracion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <IP>192.168.0.2</IP>

  <directorio_local>directorio_prueba</directorio_local>

</Configuracion>

Compact Framework:

<?xml version="1.0" encoding="utf-8"?><Configuracion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><IP>192.168.0.2</IP><directorio_local>directorio_prueba</directorio_local></Configuracion>

¿Qué diferencia le ves?

La librería System.xml del señor Compact Framework intenta ser eficiente eliminando tabuladores y saltos de línea (\t y \n), lo cual no hace la correspondiente del Framework.

Como añadido extra muy interesante, podemos obtener el path donde corre nuestra aplicación de dispositivo móvil con la siguiente función proporcionada por nuestro compañero Paco de Oviedo (también aparece en el primer entregable de la revista Student.NET)

/// <summary>

/// Devuelve el path de la aplicacion para poder acceder a los recursos

/// </summary>

/// <returns>El path de la aplicacion</returns>

private string GetAppPath()

{

 

System.Reflection.Module[] modules = System.Reflection.Assembly.GetExecutingAssembly().GetModules();

 

string aPath = System.IO.Path.GetDirectoryName(modules[0].FullyQualifiedName);

 

            if ((aPath != "") && (aPath[aPath.Length - 1] != '\\'))

 

                aPath += '\\';

 

            return aPath;

}

 

Un saludo. Ramón Tébar Bueno

Coordinador Albacete DotNetClub

Publicado 05 marzo 07 09:44 por rtebar
Archivado en:

Comentarios

Aún no ha hecho nadie ningún comentario. Escribe alguno y sé el primero :P
No se permiten comentarios de usuarios anónimos

About rtebar

Un estudiante de Ingeniería Informática con muchas ganas de aprender, donde los días de 24 horas pasan como un soplo de viento. ¡Quieron un clon o una máquina del tiempo! Coordinador Albacete DotNetClub MSP - MCP IEEE Member