我正在为我的案例对象使用我自己的 JSON 序列化器和反序列化器的隐式实现
我的案例类看起来像(它只是一个代码片段)
sealed trait MyTrait
case object MyCaseClass extends MyTrait
我想写我自己的ser。和沙漠。用于 MyTrait 的 JSON
implicit val myTraitFormat = new JsonFormat[MyTrait] {
override def read(json: JsValue): MyTrait = json.asJsObject.getFields("value") match {
case Seq(JsString("TEST")) ⇒ MyCaseClass
case _ ⇒ throw new DeserializationException(s"$json is not a valid extension of my trait")
}
override def write(myTrait: MyTrait): JsValue = {
myTrait match {
case MyCaseClass => JsObject("value" -> JsString("TEST"))
}
}
}
现在我的测试因抛出 DeserializationException 而失败:
"The my JSON format" when {
"deserializing a JSON" must {
"return correct object" in {
val json = """{"value": "TEST"}""".asJson
json.convertTo[MyTrait] must equal (MyCaseClass)
}
}
}
显然json.asJsObject.getFields("value")
无法匹配到Seq(JsString("TEST"))
。也许这与使用特征有关?但我在官方 spray-json 网站https://github.com/spray/spray-json#providing-jsonformats-for-other-types上找到了示例
任何想法如何正确匹配 JsObject 中的字段?
谢谢!最好的