Ocaml 如何使用atdgen序列化外部类型?

Ocaml 如何使用atdgen序列化外部类型?,ocaml,Ocaml,我在我的项目中使用Core和atdgen 我有以下记录,我想用JSON序列化: type person = { (* ... *) birth : Time.t; (* ... *) } 可以在我的atd文件中告诉我如何将Time.t值序列化为字符串(通过调用Time.to\u string)吗?您可以将Time.t封装在这样的模块中: type time <ocaml_json module="TimeWrapper" t="t"> = abstract 尽管@ev

我在我的项目中使用Core和atdgen

我有以下记录,我想用JSON序列化:

type person = {
  (* ... *)
  birth : Time.t;
  (* ... *)
}

可以在我的atd文件中告诉我如何将
Time.t
值序列化为字符串(通过调用
Time.to\u string
)吗?

您可以将Time.t封装在这样的模块中:

type time <ocaml_json module="TimeWrapper" t="t"> = abstract

尽管@everiq的答案有效,但有一种更简单的方法可以将JSON字符串转换为自定义类型。至少对我来说是这样

type time = string wrap <ocaml t="Core.Std.Time.t"
  wrap="Core.Std.Time.of_string" unwrap="Core.Std.Time.to_string">

type person = {
  (* ... *)
  birth : time;
  (* ... *)
}
type time=string wrap
类型人={
(* ... *)
出生:时间;
(* ... *)
}

谢谢您的回答。什么是
Bi\u输出
模块?我找不到任何关于它的文件。对不起,这是原因。只是打字错误。该模块由Yojson包提供。如果在声明上运行atdgen,则可以看到此函数和签名。
type time = string wrap <ocaml t="Core.Std.Time.t"
  wrap="Core.Std.Time.of_string" unwrap="Core.Std.Time.to_string">

type person = {
  (* ... *)
  birth : time;
  (* ... *)
}