【发布时间】:2015-04-18 15:21:40
【问题描述】:
以下代码显示了使用 Jackson 对简单类进行序列化和反序列化。问题是在反序列化过程中没有调用Root 的普通构造函数,因此Leaf 类的瞬态字段name 没有最初构造时的值。有什么方法可以为瞬态字段提供所需的值,而不必使它们成为变量?一些自定义序列化程序或一些巧妙的注释?
我不想序列化 name 值以保持序列化格式尽可能紧凑 - 毕竟数据结构给出了所有值,并且应该可以再次从结构重新创建它。
import com.fasterxml.jackson.annotation._
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
class Leaf(val value:Int, @transient val name:String) {
def this(@JsonProperty value:Int) = this(value,"")
}
class Root(val a: Leaf, val b:Leaf)
object Main extends App {
val om = new ObjectMapper() with ScalaObjectMapper {
registerModule(new DefaultScalaModule)
}
val root = new Root(new Leaf(1,"a"), new Leaf(2, "b"))
val out = om.writeValueAsString(root)
println(out)
val test = om.readValue(out, classOf[Root])
}
【问题讨论】:
标签: scala serialization jackson deserialization transient