comment sérialiser des classes de cas avec des traits avec jsonspray
Je comprends que si j'ai:
case class Person(name: String)
Je peux utiliser
object PersonJsonImplicits extends DefaultJsonProtocol {
implicit val impPerson = jsonFormat1(Person)
}
et donc sérialiser avec:
import com.example.PersonJsonImplicits._
import spray.json._
new Person("somename").toJson
cependant que faire Si j'ai
trait Animal
case class Person(name: String) extends Animal
et j'ai quelque part dans mon code
val animal = ???
et j'ai besoin de sérialiser et je veux utiliser json pulvérisation
qui sérialiseur dois-je ajouter que j'espérais avoir quelque chose comme:
object AnimalJsonImplicits extends DefaultJsonProtocol {
implicit val impAnimal = jsonFormat???(Animal)
}
où peut-être j'ai besoin d'ajouter quelques traits afin de vérifier de quel type est l'Animal de sorte que si son une personne, je voudrais directe à la personne, mais rien trouvé... a la lecture de https://github.com/spray/spray-json et ne pas comprendre comment le faire..
alors, comment puis-je sérialiser l'ensemble de
trait Animal
case class Person(name: String) extends Animal
avec json spray?
source d'informationauteur Jas
Vous devez vous connecter pour publier un commentaire.
Vous avez deux options:
Option 1
Étendre
RootJsonFormat[Animal]
et de mettre votre logique personnalisée pour la mise en correspondance des différents types deAnimal
:Si vous collez ce code dans la Scala REPL vous obtenez ce résultat:
Source
Option 2
Une autre option est de fournir implicite
jsonFormat
s pourPerson
et tous les autres sous-classes deAnimal
et puis rédigez votre sérialiser code comme ceci:Source