我經常需要序列化/反序列化和類型(如Either[S,T]
),我還沒有找到一個通用或優雅的方式來做到這一點。下面是一個例子類型(基本等同於Either
)JSON序列化在斯卡拉玩多個案例類(和類型)特質
sealed trait OutcomeType
case class NumericOutcome(units: String) extends OutcomeType
case class QualitativeOutcome(outcomes: List[String]) extends OutcomeType
這裏是在實現系列化的配套對象我最大的努力。它可以工作,但是爲每種和數類型重複編寫這些類型的東西是非常煩人的。是否有任何建議使其更好和/或更一般?
import play.api.libs.json._
import play.api.libs.functional.syntax._
object OutcomeType {
val fmtNumeric = Json.format[NumericOutcome]
val fmtQualitative = Json.format[QualitativeOutcome]
implicit object FormatOutcomeType extends Format[OutcomeType] {
def writes(o: OutcomeType) = o match {
case [email protected](_) => Json.obj("NumericOutcome" -> Json.toJson(n)(fmtNumeric))
case [email protected](_) => Json.obj("QualitativeOutcome" -> Json.toJson(q)(fmtQualitative))
}
def reads(json: JsValue) = (
Json.fromJson(json \ "NumericOutcome")(fmtNumeric) orElse
Json.fromJson(json \ "QualitativeOutcome")(fmtQualitative)
)
}
}
你試過json4s HTTP:/ /json4s.org? 另外,如果你想用它玩,那麼你應該看看這裏:https://github.com/tototoshi/play-json4s 或自己實現這一點。 –
對我很好。你可以更新你的最佳努力來玩2.5嗎?謝謝! – qed
沒關係,我發現如何在play2.5中做到這一點,並把它放在答案中。 – qed