我想產生JSON爲包括基類和派生類的List。下面的代碼只爲Animal類生成JSON(我沒有得到Dog類成員的品種領域)。一些幫助將不勝感激。斯卡拉播放框架2.1派生類
import play.api.libs.json._
class Animal (val name:String) {
}
object Animal {
implicit object animalWrite extends Writes[Animal] {
def writes(ts: Animal) = JsObject(Seq("name" -> JsString(ts.name)))
}
}
case class Dog (override val name:String, val breed: String)
extends Animal(name) {
}
object Dog {
implicit val format = Json.format[Dog]
}
case class Cat (override val name:String, val hairLength: Int)
extends Animal(name) {
}
object Cat {
implicit val format = Json.format[Cat]
}
object helloWorld extends App {
// The list below outputs: [{"name":"Ruff","breed":"labrador"}]
// val l = List[Dog](Dog("Ruff", "labrador"))
// The list below outputs: [{"name":"Ruff"},{"name":"Fluffy"}]
// I expect to see: [{"name":"Ruff","breed":"labrador"},{"name":"Fluffy","hairLength":3}]
val l = List[Animal](Dog("Ruff", "labrador"), Cat("Fluffy", 3))
println(Json.toJson(l))
}
Scala和Play新手在這裏,請原諒不適當使用的術語。
謝謝johanandren。這很有幫助,我認爲這個問題與暗示有關,但我不知道如何。我所做的解決方法是在Dog和Cat中實現一個調用'Json.toJson(this)'的序列化方法,並用'l.map(_。serialize).mkString(「[」,「 「,」]「)'。你的更好,因爲你不必像我一樣手動連接Json。謝謝。 – ariscris
Is'nt最好添加在動物女巫的函數的toJSON可以像 ''' 情況下類狗(重寫VAL名:字符串,VAL品種:字符串)來實現 延伸動物(名稱){ DEF的toJSON = Json.toJson(this) } ''' – crak
通常這樣做是可以避免的,因爲它會混合並緊密地將你的領域模型與一種形式的序列化的實現細節緊密耦合,而播放json的類型類通常使用很好的decouples這個。 – johanandren