viernes, 13 de agosto de 2010

[WCF] Implementando objeto serializable ( II )

Con este artículo concluyo la miniserie sobre SilverLight y WPF, ya que simplemente queda explicar cómo se puede serializar y deserializar un objeto en WCF. Recordemos que todo esto ha venido por una aplicación SL que estoy montando y que a través de un servicio web en WCF ejerzo dicho proceso de serialización sobre los objetos.

Para ello, tenemos que tener en cuenta las siguientes partes:

  • DataContractSerializer: Es la clase encargada de serializar el tipo. Nosotros podemos espeficiar y crear nuevos tipos de serializadores para nuestros objetos de datos según nuestras necesidades.
  • Stream: Un flujo de datos, sea de memoria o ficheros que permita abrir o cerrarlos para acceder a los datos.

Ya está. Sencillo, ¿no? Pues veamos un par de ejemplos:

   1: public bool SaveToXML(Foo foo)
   2: {
   3:     bool retValue = false;
   4:     FileStream file = null;
   5:     try
   6:     {
   7:         DataContractSerializer dcs = new DataContractSerializer(foo.GetType());
   8:         file = new FileStream(@"fooPath", FileMode.Create);
   9:         dcs.WriteObject(file, galleryManager);
  10:         retValue = true;
  11:     }
  12:     catch ( Exception ex )
  13:     {
  14:         //...
  15:     }
  16:     finally
  17:     {
  18:         if ( file != null )
  19:         {
  20:             file.Close();
  21:         }
  22:     }
  23:     return retValue;
  24: }

Y ahora otro ejemplo para abrir un fichero y deserializarlo:

   1: public Foo LoadFromXML()
   2: {
   3:     FileStream file = null;
   4:     Foo foo = null;
   5:     try
   6:     {
   7:         DataContractSerializer dcs = new DataContractSerializer(Foo.GetType());
   8:         file = new FileStream(@"FooPath", FileMode.OpenOrCreate);
   9:         foo = (Foo)dcs.ReadObject(file);
  10:     }
  11:     catch (Exception ex)
  12:     { }
  13:     finally
  14:     {
  15:         if (file != null)
  16:         {
  17:             file.Close();
  18:         }
  19:     }
  20:     return foo;
  21: }

Con estas dos funciones ya podemos escribir y cargar datos del XML de nuestra clase serializada Foo.

No hay comentarios:

Publicar un comentario