我有一个如下的结构:
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从json中读取/写入?这对于writes来说很简单,但是reads呢
发布于 2019-09-12 22:02:46
你需要的是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或者,如果您有来自enumeratum的枚举的静态值
发布于 2019-09-12 22:15:41
如果您想继续使用case对象,可以定义一个自定义的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对象中引入新字段的情况。
https://stackoverflow.com/questions/57908346
复制相似问题