通过Lift-JSON序列化和反序列化json对象

时间:2010-02-08 21:17:01

标签: json scala

当我想反序列化一个json字符串时,我有一个来自lift-json的异常。 (使用v2M1)。

基本上我有以下课程:

@BeanInfo
case class Game(val id:Int,
val bad:Map[String,Plan],
val good:Map[String,Plan])

我正在使用

net.liftweb.json.Serialization.read[Game](jsonInString) 

将jsonInString反序列化为Game case类。不幸的是我收到以下错误:

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)

感谢您的评论, 谢谢, -A

PS - 我尝试了v2M2(2010年2月10日来自Scala-tools.org的快照),异常消失但序列化不正确!请参阅以下评论。

1 个答案:

答案 0 :(得分:2)

几天前刚刚添加了对scala.Map进行序列化的支持。它将在Lift-2.0-M2中发布,在一两天内发布。如果您现在需要该功能,可以尝试夜间快照。

注意,案例类中不需要@BeanInfo和显式val。你可以定义:

case class Game(id: Int, bad: Map[String, Plan], good:Map[String,Plan])