2011-11-09 15 views
9

Me gustaría serializar en Scala - He visto el me gusta de sjson y la anotación @serializable - sin embargo, no he podido ver cómo hacer para que lidien con 1 obstáculo importante - Type Erasure y Genéricos en las bibliotecasSerialización fácil de Scala?

Tome como ejemplo la biblioteca Graph for Scala. Hago un uso intensivo de él en mi código y me gustaría escribir varios objetos con gráficos en el disco a lo largo de mi código para su posterior análisis. Sin embargo, muchas veces los tipos de nodo y borde están encapsulados en argumentos de tipo genérico de otra clase que tengo. ¿Cómo puedo serializar adecuadamente estas clases sin modificar la biblioteca para tratar el reflejo o "ensuciar" mi código importando un gran número de Type Classes (la serialización según cómo se vea un objeto es totalmente insatisfactoria de todos modos ...)?

ejemplo,

class Container[N](val g: Graph[N,DiEdge]) { 
    ... 
} 

// in another file 
def myMethod[N](container: Container[N]): Unit = { 
    <serialize container somehow here> 
} 

Respuesta

5

Para informar sobre mis hallazgos, el XStream de Java hace un trabajo fenomenal: cualquier cosa y todo, genéricos o no, se pueden serializar automáticamente sin ninguna entrada adicional. Si necesita una forma rápida y sin problemas de hacer funcionar la serialización, ¡XStream es la solución!

Sin embargo, debe tenerse en cuenta que el XML de salida no será particularmente conciso sin su propia entrada. Por ejemplo, cada bloque de memoria utilizado por el HashMap de Scala se grabará, ¡incluso si la mayoría de ellos no contienen nada!

2

Si está utilizando Gráficos para Scala y si JSON es el formato de serialización, se puede utilizar directamente graph-json.

Aquí está el code and the doc.

+0

Sí, estoy al tanto de la biblioteca, pero el punto clave es que los gráficos son una pieza de un rompecabezas mucho más grande. – duckworthd

Cuestiones relacionadas