如何做数据对象的自动数据序列化?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

在Java中,我可以使用相同的对象来持久化数据库(使用Hibernate),序列化为XML(使用JAXB)以及序列化为JSON(json-lib)。您可以在Ruby和Python中执行相同的操作,通常也遵循Java的属性或注释的一些简单规则。

因此我不需要大量的“域名转移对象”。我可以专注于我工作的领域。

像Haskell和Ocaml这样的非常严格的FP似乎是不可能的。特别是Haskell。我所看到的唯一的事情就是做一些预处理或元编程(ocaml)。只是认为你必须从底。

提问于
用户回答回答于

如果你不喜欢给定类型foo的自动生成序列化程序,那么您始终可以编写自己的序列化程序,并且它非常适合包含foo作为组件的类型的自动生成序列化程序。

唯一的缺点是你需要学习camlp4为自己写一个。但使用它们非常容易,一旦你的生成系统设置为使用预处理器。这就像添加with sexp到类型定义的末尾一样简单:

type t = { foo: int; bar: float }
with sexp
用户回答回答于

我不能对OCaml说话,但我想说Haskell的主要困难在于反序列化需要事先知道类型 -没有通用的方式来从格式中机械地反序列化,找出结果的值,以及从那里出发,尽可能使用不健全或动态类型系统的语言。

抛开类型问题,Haskell有多种序列化数据的方法:

  • 内置类型类Read/ Show(de)将代数数据类型和大多数内置类型作为字符串进行序列化。行为良好的实例通常应该read . show是等价的id,并且可以将结果show解析为构造序列化值的Haskell源代码。
  • Hackage可以找到各种序列化软件包; 通常这些要求被序列化的类型是某种类型的实例,该包提供了大多数内置类型的实例。有时候,他们只需要一个自动生成类型的反射元编程Data类的实例(迷人的完全限定名称Data.Data.Data),或者提供模板Haskell代码来自动生成实例。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励