Ich mag würde eine erweiterte Klasse in scala und ich einige Test-Code haben serialisiert ..Serialize erweiterte Klasse zu JSON in Scala mit Play-Framework Serializer
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.libs.json.Json
@RunWith(classOf[JUnitRunner])
class JsonSerializerTest extends Specification {
class A(val s1: String)
case class B(s2: String) extends A("a")
"Application" should {
"serialize class to JSON" in {
implicit val bWrites = Json.writes[B]
implicit val bReads = Json.reads[B]
val bClass = B("b")
println(bClass.s1 + " " + bClass.s2)
val serialized = Json.toJson[B](bClass)
val s1 = (serialized \ "s1").asOpt[String]
s1 should beSome[String]
}
}
}
In diesem Fall Testdruck:
a b
Application should
'None' is not Some
java.lang.Exception: 'None' is not Some
Es bedeutet, dass s1-Feld von Elternklasse nicht serialisiert wurden.
Die Lösung
class A(val s1: String)
case class B(override val s1: String, s2: String) extends A(s1)
meist nicht akzeptabel, da in realen Anwendungsklassen haben viele Felder und explizit jedes Mal angeben, wenn ich verlängern Klasse den Code erschwert.
Gibt es eine andere Lösung für diesen Fall?