Znajduję się w sytuacji, w której muszę przekształcić JSON w klasę non-case.spray-json dla klas normalnych (bez nich) na liście
posiadające klasy jako:
class MyClass(val name: String) {
def SaySomething() : String = {
return "Saying something... "
}
}
Utworzyłem JsonProtocol dla tej klasy:
object MyClassJsonProtocol extends DefaultJsonProtocol {
implicit object MyClassJsonFormat extends JsonWriter[MyClass] {
override def write(obj: MyClass): JsValue =
JsObject(
"name" -> JsString(obj.name)
)
}
}
Później w kodzie importować protokół ..
val aListOfMyClasses = List[MyClass]() ... // lets assume that has items and not an empty list
import spray.json._
import MyClassJsonProtocol._
val json = aListOfMyClasses.toJson
Podczas próby zbudowania projektu pojawia się następujący błąd:
Nie można znaleźć JsonWriter lub JsonFormat dla klasy typu listy [MojaKlasa]
natryskowego json ma już formatu listy rodzajowy i jestem zapewniając format dla mojej klasy, jaki byłby problem?
Z góry dziękuję ... !!!
Thks. Działa, chociaż nadal nie wiem, dlaczego nie zawarto cechy CollectionFormats. Dodałem go do importu jawnie, ale skompilowałbym eter. – leonfs
Nie ma potrzeby importowania CollectionFormats. DefaultJsonProtocol rozszerza wszystkie te cechy - https://github.com/spray/spray-json/blob/master/src/main/scala/spray/json/DefaultJsonProtocol.scala#L26 –
Wiem, ale to nie wyjaśnia dlaczego nie działa przy rozszerzaniu JsonWriter zamiast JsonFormat. Wciąż rozszerza DefaultJsonProtocol. – leonfs