Scala Json4s支持带有trait mixin的case类

Scala Json4s支持带有trait mixin的case类,scala,json4s,Scala,Json4s,我正在尝试使用json4s和jackson支持序列化scala case类。但是对于我尝试混合traits的场景,它无法序列化类。下面是一个代码示例 trait ISearchKey { var id:String = "" } 当我执行下面的代码时,我会得到空的花括号,没有序列化的值,但如果我删除trait mixin,那么CrystalFieldInfo值会被正确序列化 val fld = new CrystalFieldInfo("Field1") with ISearc

我正在尝试使用json4s和jackson支持序列化scala case类。但是对于我尝试混合traits的场景,它无法序列化类。下面是一个代码示例

trait ISearchKey {
    var id:String = ""  
}
当我执行下面的代码时,我会得到空的花括号,没有序列化的值,但如果我删除trait mixin,那么CrystalFieldInfo值会被正确序列化

  val fld = new CrystalFieldInfo("Field1") with ISearchKey
  fld.id = "Id1"          
  implicit val formats = Serialization.formats(NoTypeHints)
  val ser = write[CrystalFieldInfo with ISearchKey](fld)
  println(ser)

希望您能深入了解这个问题。提前感谢

要让Json4s序列化的不仅仅是case类成员变量,您需要为trait向formats变量添加一个FieldSerializer,如下所示:

implicit val formats = DefaultFormats + FieldSerializer[ISearchKey]()
val ser = write[CrystalFieldInfo with ISearchKey]
println(ser) // should include the "id" field from the ISearchKey trait
有关FieldSerializer的更多信息,请参见:


源代码中还有几个示例:

在将case类与trait混合后,结果类型发生了更改,您不应该提供类型提示吗?您有没有想过这一点?我遇到了同样的问题。