[英]How to read/write trait with case objects using play-json
我有以下结构:
sealed trait Animal {
def name: String
def kind: String
}
case object Dog extends Animal {
override def name: String = "A"
override def kind: String = "B"
}
case object Whale extends Animal {
override def name: String = "C"
override def kind: String = "B"
}
我怎么能用play-json
读/写到play-json
? writes
很简单,但是reads
呢?
您需要case classes
不是case objects
,例如:
sealed trait Animal {
def name: String
def kind: String
}
case class Dog(name: String = "A", kind: String = "B") extends Animal
case class Whale(name: String = "C", kind: String = "B") extends Animal
或者,如果您具有静态值,则可以使用枚举中的枚举
如果您要坚持使用案例对象,则可以定义自定义Writer
/ Reader
import play.api.libs.json._
implicit val w: Writes[Animal] = {
case d @ _ => Json.obj(
"name" -> d.name,
"kind" -> d.kind
)
}
Json.toJson(Dog)
您可以对其进行自定义以分别处理每个对象,以便可以处理在case对象中引入新字段的case。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.