使用Json.format时,MyClass没有隐式格式

时间:2015-02-23 14:50:33

标签: json scala playframework-2.0 implicit

我在使用复杂对象作为Json.format上另一个对象的属性时遇到错误。

我有两个课程: RoleDTO EmailInvitationDTO EmailInvitationDTO RoleDTO 。所以,我宣布:

case class RoleDTO(id:Option[Long] = None, roleType:Int, userID:Long, fromHousingUnitID:Option[Long] = None, isAdmin:Option[Boolean] = None, fromResidentUserID:Option[Long] = None, documentNumber:Option[String] = None, fromCondoID:Option[Long] = None)
object RoleDTO { val roleFormat = Json.format[RoleDTO] }

case class EmailInvitationDTO(firstName:String, lastName:String, email:String, role:RoleDTO)
object EmailInvitationDTO{ val emailInvitationFormat = Json.format[EmailInvitationDTO] }

我收到错误: RoleDTO 没有隐式格式可用。即使我在 emailInvitationFormat 之前在一行中声明 roleFormat 变量:

object EmailInvitationDTO {
    val roleFormat = Json.format[RoleDTO]
    val emailInvitationFormat = Json.format[EmailInvitationDTO]
}

任何人都知道缺少什么?感谢。

1 个答案:

答案 0 :(得分:5)

您需要在roleFormat对象声明中包含隐式EmailInvitationDTOJson.format宏在编译时查找隐式Json格式,否则它将不知道如何在RoleDTO中读/写EmailInvitationDTO

因此,在创建emailInvitationFormat之前,您需要在范围内使用以下一行:

implicit val roleFormat = Json.format[RoleDTO]