给定trait Conjunction
个AND
和OR
个案例对象子类型:
trait Conjunction
case object AND extends Conjunction
case object OR extends Conjunction
使用Play 2 JSON,我尝试编写以下Writes[Conjunction]
:
implicit object ConjunctionWrites extends Writes[Conjunction] {
implicit val orWrites: Writes[OR] = Json.writes[OR]
implicit val andWrites: Writes[AND] = Json.writes[AND]
def writes(c: Conjunction) = c match {
case a@AND => Json.toJson(a)(andWrites)
case o@OR => Json.toJson(o)(orWrites)
}
}
但我收到了一堆not found: type AND/OR
错误。
如何序列化这些case object
?
答案 0 :(得分:5)
创建案例对象时,可以使用该名称创建值,但不能创建类型。因此AND
和OR
不存在类型。如果要引用案例对象的类型,请使用.type
,例如AND.type
。
但是,Json.writes
宏仅适用于案例类,而不适用于案例对象。你必须写自己的定义:
implicit object ConjunctionWrites extends Writes[Conjunction] {
def writes(c: Conjunction) = c match {
case AND => Json.toJson("AND")
case OR => Json.toJson("OR")
}
}