net.liftweb.json 对 Scala 枚举的支持

Support for Scala Enumeration by net.liftweb.json

我正在使用 liftweb JSON 转换器并使其正常工作,方法是在 build.sbt 中包含依赖项,如下所示:

"net.liftweb" %% "lift-json" % "2.6.2"

在我添加枚举之前这一切都有效。 我可以看到 here 支持枚举,你应该这样做:

// Scala enums
implicit val formats = net.liftweb.json.DefaultFormats + new EnumSerializer(MyEnum)

但问题是在我的环境中无法识别 net.liftweb.json.ext 包。这是 EnumSerializer 所在的包。

您需要包含一个单独的扩展库。添加额外的一行,例如:

"net.liftweb" %% "lift-json-ext" % "2.6.2"

应该可以解决问题。

我有一个由 gRPC 原型创建的枚举,在这种情况下,EnumSerializer 对我不起作用。在这种情况下,我创建了一个自定义序列化程序并且效果很好。

case object GrpcTimeUnitSerializer extends CustomSerializer[TimeUnit] (format => (
  {
    case JString(tu) => TimeUnit.fromName(tu.toUpperCase).get
    case JNull       => throw new GrpcServiceException(Status.INTERNAL.withDescription("Not allowed null value for the type TimeUnit."))
  },
  {
    case tu: TimeUnit => JString(tu.toString)
  }
))

这里是 DefaultFormats 定义:

implicit val formats: Formats = DefaultFormats + GrpcTimeUnitSerializer