我发现自己处于需要将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已经有了通用列表的格式,我正在为我的班级提供一种格式,会出现什么问题?
提前致谢... !!!
答案 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
。这本身就给我带来了更多的困难 - 我打算在课堂上使用默认阅读器。
哦,好吧......