【问题标题】:Automatic type hints resolving in json4sjson4s 中的自动类型提示解析
【发布时间】:2015-04-09 16:29:24
【问题描述】:

假设我有一个类层次结构:

trait Event
case class ThisEvent extends Event
case class ThatEvent extends Event
case class AnotherEvent extends Event

目前在我的序列化代码中我必须使用这个:

implicit val formats = new DefaultFormats {
  override val typeHintFieldName = "_t"
  override val typeHints = ShortTypeHints(List(classOf[ThisEvent], classOf[ThatEvent], classOf[AnotherEvent]))
}

但我更喜欢这样的:

implicit val formats = new DefaultFormats {
  override val typeHintFieldName = "_t"
  override val typeHints = ShortTypeHints(List(classOf[Event]))
}

你会怎么解决这个问题?

【问题讨论】:

    标签: scala jackson json4s


    【解决方案1】:

    如果您可以使Event 成为密封特征,那么您可以使用解释过的宏here 来迭代其子类,方法是引入带有所需辅助方法的SealedExample 对象。该示例仅获取扩展密封特征的对象,但您可以轻松修改它以返回每个子类的classOf。然后你可以这样做:

    override val typeHints = ShortTypeHints(SealedExample.values[Event].toList)
    

    否则,不幸的是,Scala 中没有本地方法可以在编译时生成特征的子类型列表。

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多