4

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

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

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")
                             ^

我该如何解决?

4

1 回答 1

7

要让递归隐式找到自己,您需要给它一个显式的类型定义。将您的隐式更改为:

implicit val menuItemFormat: RootJsonFormat[Item] = jsonFormat(Item.apply, "name", "desc", "prices", "subitems")
于 2013-05-08T02:31:33.303 回答