在Scala中选择对象序列化格式

时间:2013-01-27 18:15:10

标签: xml json scala serialization yaml

我有一个管理节点和弧图的应用程序,其中节点具有少量属性。现在我正处于需要保存数据的位置,我需要选择序列化格式。这是一些明显的列表,但可能还有其他我没有考虑过的。

  • Java序列化
  • XML
  • JS​​ON
  • YAML
  • Google协议缓冲区

Java序列化有很多原因,即使在Java世界中,由于互操作性,模式迁移和易用性的原因,XML和其他序列化格式也是首选。

Scala的XML支持似乎是一个明显的选择。但是,我个人发现源代码中嵌入的XML文字的想法令人反感(即使是语言的创建者也承认他对此决定感到遗憾)。这个特性在生成标记文本时可能更有意义 - 但是在序列化对象时,你真的需要一个更高级别的API,它尽可能地分离理解内部数据结构的代码,从理解序列化语法的代码中分离出来。格式 - 这意味着理想情况下,您应该永远不会在源代码中看到任何XML。此外,谷歌网络搜索显示许多博客帖子声称Scala的XML DOM有很多瑕疵,并且使用起来很尴尬。 (还有一些图书馆声称可以改善这种情况,但随后又需要选择哪一个。)

JSON和Yaml也可以工作 - 这里的问题是最流行的序列化库是用Java编写的,因此任务涉及选择或编写适当的Scala包装类。此外,这些库中的许多都依赖于bean反射,这在Scala中可能有些笨拙,需要额外的注释来使事情发挥作用。

最后,我使用Google protobufs进行了许多其他序列化任务。好的部分是protoc编译器可以生成与目标语言的习语匹配的优雅API。然而,在这种情况下,protobufs的优势之一,即编码数据流的小尺寸,并不重要,我宁愿有一些序列化数据是人类可读的东西。

1 个答案:

答案 0 :(得分:2)

在我看来,JSON是Scala世界中的热门选择,特别是Play框架提供的基于类型的API:http://www.playframework.org/documentation/2.0.1/ScalaJson