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
我正在使用 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