我有一个嵌套在另一个类列表中的类。看起来像这样
import spray.json._
import DefaultJsonProtocol._
case class Person(
firstName: String,
lastName: String
)
object Person {
...
}
object PersonJsonProtocol extends DefaultJsonProtocol {
implicit val personFormat = jsonFormat2(Person.apply)
}
这里的toJson方法可以完美地工作,但是,该类作为列表嵌入在另一个这样的类中。
import Person._
import PersonJsonProtocol._
import spray.json._
import DefaultJsonProtocol._
case class Course(
courseName: String,
students: List[Person]
)
object CourseJsonProtocol extends DefaultJsonProtocol {
implicit val courseFormat = jsonFormat2(Course)
}
在另一堂课
import Person._
import Course._
import PersonJsonProtocol._
import CourseJsonProtocol._
new Course("English", List(persons)).toJson
// this is failing
但是,当我导入此协议并尝试使用toJson方法时,我得到“找不到Course的JsonWriter或JsonFormat类型类”
我不确定如何实现对象的嵌套列表的反序列化,我在文档的任何地方都找不到。以前有人设法做到这一点吗?
最好。
答案 0 :(得分:0)
所以我设法通过隐式重写write函数来完成它。
object CourseJsonProtocol extends DefaultJsonProtocol {
implicit object CourseFormat extends RootJsonFormat[Course] {
def write(course: Course) = {
JsObject(
"course_name" -> JsString(course.courseName),
"students" -> JsArray(for(student <- course.students) yield student.toJson)
)
}
def read(value: JsValue) = value match {
...
}
}
}