J'ai une exception de lift-json lorsque je souhaite désérialiser une chaîne json. (en utilisant v2M1).sérialisation et désérialisation d'un objet json via Lift-JSON
Fondamentalement, j'ai la classe suivante:
@BeanInfo
case class Game(val id:Int,
val bad:Map[String,Plan],
val good:Map[String,Plan])
et je me sers
net.liftweb.json.Serialization.read[Game](jsonInString)
désérialiser le jsonInString dans une classe de cas de jeu. Malheureusement, je reçois l'erreur suivante:
net.liftweb.json.MappingException: Can't find primary constructor for class interface scala.collection.immutable.Map
at net.liftweb.json.Meta$.fail(Meta.scala:93)
at net.liftweb.json.Meta$Reflection$$anonfun$primaryConstructorOf$1.apply(Meta.scala:129)
at net.liftweb.json.Meta$Reflection$$anonfun$primaryConstructorOf$1.apply(Meta.scala:129)
at scala.Option.getOrElse(Option.scala:61)
at net.liftweb.json.Meta$Reflection$.primaryConstructorOf(Meta.scala:129)
at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:106)
at net.liftweb.json.Extraction$.build$1(Extraction.scala:119)
at net.liftweb.json.Extraction$$anonfun$2$$anonfun$apply$1.apply(Extraction.scala:119)
at net.liftweb.json.Extraction$$anonfun$2$$anonfun$apply$1.apply(Extraction.scala:119)
at scala.List.flatMap(List.scala:1132)
at net.liftweb.json.Extraction$$anonfun$2.apply(Extraction.scala:119)
at net.liftweb.json.Extraction$$anonfun$2.apply(Extraction.scala:119)
at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:106)
at net.liftweb.json.Extraction$.build$1(Extraction.scala:119)
at net.liftweb.json.Extraction$.extract0(Extraction.scala:154)
at net.liftweb.json.Extraction$.extract(Extraction.scala:37)
at net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:247)
at net.liftweb.json.Serialization$.read(Serialization.scala:50)
Je vous remercie de vos commentaires, Merci, -A
PS - J'ai essayé v2M2 (instantané @ 10 février 2010 à partir Scala-tools.org), l'exception a disparu mais la sérialisation n'est pas correcte! Voir les commentaires ci-dessous.
En fait, cela ne fonctionne pas avec le cas d'utilisation suivant (en utilisant maintenant la libération de l'instantané de Lift-JSON des outils de scala): cas plan de classe (régime: Option [Action] case class Jeu (jeu: Carte [Chaîne, Plan]) case class Action (id: Int, sousAction: Option [Action]) val jeu = nouveau Jeu (Carte ("a" -> nouveau Plan (nouveau Certains (nouvelle Action (1, aucune))))) implicite val formats = net.liftweb.json.DefaultFormats jeu doit êtreEqualTo ( Serialization.read [Jeu] (Serialization.write (jeu))) –
J'ai ajouté un ticket pour ce bug. Le lien suivant montre une solution de rechange: http://www.assembla.com/spaces/liftweb/tickets/341-Type-hints-are-needed-in-JSON-serializization-for-non-polymorphic-Map- – Joni