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ódigo
; 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