【发布时间】:2014-06-06 11:12:02
【问题描述】:
我正在为我的案例对象使用我自己的 JSON 序列化器和反序列化器的隐式实现
我的案例类看起来像(它只是一个代码 sn-p)
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 中的字段?
谢谢! 最好的
【问题讨论】:
-
我不明白:您的测试测试序列化,但您实现了反序列化(= 读取方法)?
-
抱歉代码有错误...你是对的...已修复!
标签: json scala serialization spray-json