Scala案例类在相同的文件中排序

时间:2013-03-15 05:36:14

标签: scala playframework-2.1

我有一个包含两个案例类的scala文件。 ContactInfo是Profile的一部分。如果我在Profile案例类之后放置ContactInfo案例类,则将抛出两个编译异常。为什么课程的顺序很重要?如果我在Profile之前移动ContactInfo,则错误消失。

[error] No Json deserializer found for type Option[models.ContactInfo]. Try to implement an implicit Writes or Format for this type.
[error]         "contactInfo" -> p.contactInfo

[error] No Json deserializer found for type models.ContactInfo. Try to implement an implicit Reads or Format for this type.
[error]     (__ \ 'contactInfo).readNullable[ContactInfo]




case class Profile(
  id: ObjectId = new ObjectId,
  contactInfo: Option[ContactInfo] = None
)

object Profile extends ProfileJson

trait ProfileJson {

  implicit val profileJsonWrite = new Writes[Profile] {
    def writes(p: Profile): JsValue = {
      Json.obj(
        "id" -> p.id,
        "contactInfo" -> p.contactInfo
      )
    }
  }
  implicit val profileJsonRead = (
    (__ \ 'id).read[ObjectId] ~
    (__ \ 'contactInfo).readNullable[ContactInfo]
  )(Profile.apply _)
}

case class ContactInfo(
  givenName: String
)

object ContactInfo {
  implicit val contactInfoJsonWrite = new Writes[ContactInfo] {
    def writes(a: ContactInfo): JsValue = {
      Json.obj(
        "givenName" -> a.givenName
      )
    }
  }

  implicit val contactInfoJsonRead = (
    (__ \ 'givenName).read[String]
  )(ContactInfo.apply _)
}

1 个答案:

答案 0 :(得分:0)

我不认为类的排序是问题所在。我认为隐含找到它们的规则是你的问题。尝试更改伴随对象的顺序。