代码之家  ›  专栏  ›  技术社区  ›  talex

scala sealed trait到json序列化

  •  0
  • talex  · 技术社区  · 7 年前

    我有下一个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":{}}" .

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

    如果 杰克逊 不行,还有别的图书馆吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   talex    7 年前

    我发现唯一可行的方法是自定义seralizer和desalizer。

    你必须实施 JsonSerializer JsonDeserializer 为了密封的特质和标记你的特质 @JsonSerialize @JsonDeserialize .

    或者您可以在中注册serealizer和反序列化程序 ObjectMapper .