用于列表上的正常类(非大小写)的spray-json

时间:2014-10-28 17:00:12

标签: scala scala-2.10 spray-json

我发现自己处于需要将JSON序列化为非案例类的情况。

有一个班级:

class MyClass(val name: String) {
  def SaySomething() : String = {
    return "Saying something... "
  }
}

我为这个类创建了一个JsonProtocol:

object MyClassJsonProtocol extends DefaultJsonProtocol {

  implicit object MyClassJsonFormat extends JsonWriter[MyClass] {
  override def write(obj: MyClass): JsValue =
    JsObject(
      "name" -> JsString(obj.name)
    )
  }
}

稍后在代码中导入协议..

val aListOfMyClasses = List[MyClass]() ... // lets assume that has items and not an empty list
import spray.json._
import MyClassJsonProtocol._

val json = aListOfMyClasses.toJson

在尝试构建项目时,我收到以下错误:

找不到类型为List [MyClass]的JsonWriter或JsonFormat

spray-json已经有了通用列表的格式,我正在为我的班级提供一种格式,会出现什么问题?

提前致谢... !!!

2 个答案:

答案 0 :(得分:3)

当我从 JsonFormat 而不是 JsonWriter 扩展MyClassJsonFormat时,它盯着正常工作。看起来只有从 JsonFormat

延伸时,CollectionFormats特征才有效

以下代码编译好我

  object MyClassJsonProtocol extends DefaultJsonProtocol {

    implicit object MyClassJsonFormat extends JsonFormat[MyClass] {
    override def write(obj: MyClass): JsValue =
      JsObject(
        "name" -> JsString(obj.name)
      )

      override def read(json: JsValue): MyClass = new MyClass(json.convertTo[String])
    }
  }

答案 1 :(得分:0)

似乎提到了原因here

  

您可能遇到的问题只是JsonReader / JsonWriter   当您尝试查找JsonReader / JsonWriter for Option或a时   集合,它为包含的类型查找JsonFormat   将失败。不确定是否有我遗漏的东西会修复   那个问题。

你和我碰到了这个。目前我没有看到其他出路,而不是@ user007建议使用完整的JsonFormat。这本身就给我带来了更多的困难 - 我打算在课堂上使用默认阅读器。

哦,好吧......