Scala将特征密封到JSON序列化

时间:2018-06-06 11:00:26

标签: scala jackson

我有下一个scala类型:

case class Wrapper(v: Type)
sealed trait Type
case object TypeA extends Type
case object Typeb extends Type

我想使用Wrapper使用以下代码序列化和反序列化jackson

val mapper: ObjectMapper = new ObjectMapper
mapper.registerModule(DefaultScalaModule)

val src = Wrapper(TypeA)
val txt = mapper.writeValueAsString(src)
val dst: Wrapper = mapper.readValue(txt, classOf[Wrapper])

不幸的是,此代码无效,因为txt"{"v":{}}"

如何正确序列化/反序列化?

如果jackson无法执行此操作,那还有其他库吗?

1 个答案:

答案 0 :(得分:0)

我发现只有这样做的可能方法是自定义的seralizer和deseralizer。

您必须为密封特征实施id = 2JsonSerializer,并使用JsonDeserializer@JsonSerialize标记您的特征。

或者您可以在@JsonDeserialize中注册serealizer和反序列化器。