我有一个包含两个案例类的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 _)
}
答案 0 :(得分:0)
我不认为类的排序是问题所在。我认为隐含找到它们的规则是你的问题。尝试更改伴随对象的顺序。