如何为引用自身的案例类提供JsonFormats?

时间:2013-05-08 02:09:03

标签: json scala spray-json

如何为引用自身的案例类提供JsonFormats?

我正在遵循 this 指南,并编写了以下代码

case class Item(name: String, desc: Option[String], prices: Array[String], subitems: Option[List[Item]])

import spray.json._
import DefaultJsonProtocol._ // !!! IMPORTANT, else `convertTo` and `toJson` won't work

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val menuItemFormat = jsonFormat(Item, "name", "desc", "prices", "subitems")
}

import MyJsonProtocol._

我收到以下错误消息,其中遗憾的是我不理解。

could not find implicit value for evidence parameter of type Hi.MyJsonProtocol.JF[Option[List[mypkg.Item]]]
    implicit val menuItemFormat = jsonFormat(Item, "name", "desc", "prices", "subitems")
                             ^

我该如何解决?

1 个答案:

答案 0 :(得分:7)

对于递归隐式查找自身,您需要为其提供显式类型定义。将隐式更改为:

implicit val menuItemFormat: RootJsonFormat[Item] = jsonFormat(Item.apply, "name", "desc", "prices", "subitems")