繁体   English   中英

如何使用play-json使用案例对象读取/写入特征

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM