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

Published 09 August 07 05:00 by Escuchoyo
Filed under: ,

Comments

No Comments
Anonymous comments are disabled