我正在尝试使用lift-json进行基本序列化/水合作用,但没有成功。从包装自述文件中可以看出,这应该可行。帮助
我正在使用Scala 2.8.0和Lift 2.2为sbt交叉构建2.8(“net.liftweb”%%“lift-json”%“2.2”)。
import net.liftweb.json._
import net.liftweb.json.Serialization.{read, write}
implicit val formats = Serialization.formats(NoTypeHints)
case class Route(title: String)
val rt = new Route("x277a1")
val ser = write(rt)
// ser: String = {} ...
val deser = read[Route]("""{"title":"Some Title"}""")
// net.liftweb.json.MappingException: Parsed JSON values do not match with class constructor
答案 0 :(得分:10)
提升JSON的序列化不适用于REPL中定义的案例类(paranamer无法找到字节码来读取类型元数据)。使用scalac编译路由,然后上面的示例工作。
答案 1 :(得分:2)
每次(de)serialuzed类不在类路径上时,同样的问题也适用。在这种情况下,paranamer无法读取参数名称。有必要提供自定义ParameterNameReader。
这样的问题适用于例如:
PlayParameterNameReader:
import net.liftweb.json.ParameterNameReader
import java.lang.reflect.Constructor
import play.classloading.enhancers.LocalvariablesNamesEnhancer
import scala.collection.JavaConversions._
object PlayParameterReader extends ParameterNameReader{
def lookupParameterNames(constructor: Constructor[_]) = LocalvariablesNamesEnhancer.lookupParameterNames(constructor)
}