Mi trovo in una situazione in cui ho bisogno di serializzare in JSON una classe non-case.spray-json per classi normali (non case) su una lista
Avendo una classe come:
class MyClass(val name: String) {
def SaySomething() : String = {
return "Saying something... "
}
}
Ho creato un JsonProtocol per questa classe:
object MyClassJsonProtocol extends DefaultJsonProtocol {
implicit object MyClassJsonFormat extends JsonWriter[MyClass] {
override def write(obj: MyClass): JsValue =
JsObject(
"name" -> JsString(obj.name)
)
}
}
Più tardi nel codice importare il protocollo ..
val aListOfMyClasses = List[MyClass]() ... // lets assume that has items and not an empty list
import spray.json._
import MyClassJsonProtocol._
val json = aListOfMyClasses.toJson
Quando provo a costruire il progetto, ottengo il seguente errore:
Non riesci a trovare JsonWriter o JsonFormat per il tipo di classe List [MyClass]
spray-JSON ha già un formato per elenco generico e sto fornendo un formato per la mia classe, quale sarebbe il problema?
Grazie in anticipo ... !!!
Thks. Funziona, anche se non so ancora perché il tratto CollectionFormats non sia incluso. L'ho aggiunto alle importazioni esplicitamente, ma avrei compilato l'etere. – leonfs
Non è necessario importare CollectionFormats. DefaultJsonProtocol estende tutti questi tratti - https://github.com/spray/spray-json/blob/master/src/main/scala/spray/json/DefaultJsonProtocol.scala#L26 –
Lo so, ma poi non spiega perché non funziona quando si estende JsonWriter anziché JsonFormat. Sta ancora estendendo DefaultJsonProtocol. – leonfs