10/1/2008 16:15 Augusto Ruiz

IDictionary no es serializable usando IXmlSerializable...

Hola!

Tengo una confesión hoy. Me encanta usar la clase genérica Dictionary. Cuando necesito organizar una caché que pueda ser accedida a la velocidad del rayo, y con claves no necesariamente sencillas, ¡Zas! Dictionary que te crió. Sin embargo, la clase genérica Dictionary implementa la interfaz IDictionary, y no se puede serializar usando IXmlSerializable.

Y... ¿a quién le importa esto? Pues... teniendo en cuenta que IXmlSerializable es la interfaz mediante la cual se serializan los objetos cuando se van a usar Web Services no-WCF (WCF utiliza DataContractSerializer), la cosa parece ya un poco más importante...

Si lo pensamos un momento, serializar un diccionario a XML no es más complicado que tomar las claves y los valores, y plantarlos en un XML. A la hora de deserializar, vas metiendo cada elemento con su clave en el diccionario y listos... Entonces... ¿por qué no se puede serializar usando IXmlSerializable?

La respuesta a esta pregunta la da Kim Hamilton (de Microsoft) en los foros. Básicamente dice que la clase Dictionary es parte de mscorlib.dll y la interfaz IXmlSerializable está definida en System.Xml.dll. Para evitar una referencia circular, el diccionario no se serializa, y listos...

Pues vaya, no?

Por suerte, la gente no es que esté muy contenta con esto, y hay alguna implementación de diccionarios que sí que son serializables, y son tan flexibles como el Dictionary que viene en el framework. Por ejemplo, ésta.

Si estás creando Web Services con WCF, entonces no tendrás problemas, ya que DataContractSerializer serializa sin problemas los diccionarios.

Saludos!

Archivado en: ,
Comparte este post:

# re: IDictionary no es serializable usando IXmlSerializable...

Saturday, January 19, 2008 10:06 PM by davidcm

Nada hombre, si esta peña de MS ya se ve que son unos lumbreras xD La verdad es que es bastante curiosa la situación :P

# re: IDictionary no es serializable usando IXmlSerializable...

Saturday, November 15, 2008 10:48 PM by iHenry

Gracias, muy util, saber porque!