case class ClassA(myObjectType: TypeA.myTypeAlias)
object ClassA {
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}
object TypeA {
type myTypeAlias = Option[String]
}
我收到No implicit format for typeA.myObjectType available.
如何定义JSON格式?
答案 0 :(得分:3)
此错误来自play.api.libs.json.JsMacroImpl.scala
(line 164 in Play 2.5.0-RC2)中的自动隐式生成宏。
此代码在分析之前没有处理类型,因此它甚至无法推断TypeA.myTypeAlias
是Option
。
您可以做的一件事是指定隐式Format[myTypeAlias]
:
object ClassA {
implicit val myTypeAliasFormat: Format[TypeA.myTypeAlias] = Format.optionWithNull
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}
或
object TypeA {
type myTypeAlias = Option[String]
implicit val myTypeAliasFormat: Format[myTypeAlias] = Format.optionWithNull
}
object ClassA {
import TypeA.myTypeAliasFormat
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}
请注意,它会将JSON null
转换为None
,如果路径丢失则会产生错误,并将None
序列化为JSON null
。
我相信,当使用类型别名和使用{{1}自动隐式生成时,不可能实现将缺失路径解释为None
的行为,并跳过序列化None
}。如果您想要这种行为,则必须手动编写JSON Json.format
。