我想在Scala中进行序列化 - 我已经看过像sjson和@serializable注释这样的内容 - 但是,我一直无法看到如何让它们处理1个主要障碍 - 在图书馆中键入Erasure和Generics。
以Graph for Scala图书馆为例。我在我的代码中大量使用它,并希望在我的代码中编写几个将图形保存到磁盘的对象,以便以后进行分析。但是,很多时候节点和边缘类型都封装在我拥有的另一个类的泛型类型参数中。我怎样才能正确地序列化这些类,而无需修改库本身来处理反射或通过导入大量Type Classes来“弄脏”我的代码(根据查看对象的方式序列化完全不满意... 。)?
实施例,
class Container[N](val g: Graph[N,DiEdge]) {
...
}
// in another file
def myMethod[N](container: Container[N]): Unit = {
<serialize container somehow here>
}
答案 0 :(得分:5)
为了报告我的发现,Java的XStream做了非凡的工作 - 任何事物,所有内容,泛型或其他内容都可以自动序列化而无需任何额外的输入。如果您需要快速且无需工作的方式来进行序列化,那就是XStream!
但是,应该注意的是,没有您自己的输入,输出XML将不会特别简洁。例如,Scala的HashMap使用的每个内存块都将被记录,即使它们中的大多数都不包含任何东西!
答案 1 :(得分:2)
如果您使用 Scala图表,如果JSON是您的序列化格式,则可以直接使用graph-json
。