Serializar Dictionary de tipos complejos usando Framework 3.0 - WCF

Continuando con el anterior post de la serialización de diccionarios, una asignatura pendiente en el Framework 2.x, veremos ahora como conseguirlo con el Framework 3.0 también sobre tipos complejos; es decir, ahora tendremos un diccionario tal que Dictionary<MiTipo1,MiTipo2> y podremos des-serializarlo a XML sin necesidad de implementar nuestras propios diccionarios.

Pasemos directamente a ver un sencillo ejemplo sobre códigoWink  ; para ello suponemos declarada un sencilla clase "Casa", la cual será uno de los tipos contenidos en nuestro diccionario.


    [DataContract]
    public class Casa
    {
        [DataMember]
        public string nombre;

        [DataMember]
        public int habitaciones;

        public Casa() { }

        public Casa(string nombre,int habitaciones)
        {
            this.nombre = nombre;
            this.habitaciones = habitaciones;
        }
    }

Como podeis observar, los miembros de nuestra clase están marcados con ciertos atributos especiales. Estos también provienen del ensamblado System.Runtime.Serialization.dll y dan sorporte al nuevo motor de serializacion de WCF (Data Contract Serializer). Son fundamentales si queremos que una entidad o alguno de sus miembros sea serializable.

 

  • Serializando un diccionario de tipos complejos:
 
Dictionary<string, Casa> diccionario_casas = new Dictionary<string, Casa>(2);
          diccionario_casas.Add("iberica", new Casa("iberica", 8));
          diccionario_casas.Add("jardinera", new Casa("jardinera", 15));

          XmlWriterSettings setting = new XmlWriterSettings();
          setting.Indent = true;
          XmlWriter xtw = XmlTextWriter.Create("c:/casas.xml", setting);

          XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateDictionaryWriter(xtw);

          DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Casa>));

          dcs.WriteObject(xdw, diccionario_casas);
          xtw.Close();

  • Deserializando un diccionario de tipos complejos:

 

XmlReader xr = XmlDictionaryReader.Create("c:/casas.xml");

          DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Casa>));

          Dictionary<string, Casa> mundo = (Dictionary<string, Casa>)dcs.ReadObject(xr);

          xr.Close();

 

 Para más información http://msdn2.microsoft.com/en-us/library/ms733127.aspx

Publicado 10 agosto 07 01:00 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