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
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