Поддержка Json4s для case-класса с чертой mixin

Я пытаюсь сериализовать класс случая Scala, используя json4s с поддержкой Джексона. Но для сценариев, в которых я пытаюсь смешать черты, не удается сериализовать класс. Ниже приведен пример кода.

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)

Был бы признателен за понимание этой проблемы. заранее спасибо

1 ответ

Чтобы заставить Json4s сериализовать не только переменные-члены класса case, вам нужно добавить 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 здесь: https://github.com/json4s/json4s

В источнике также есть несколько примеров: https://github.com/json4s/json4s/blob/ebc76d70309c79c39df4be65f16b88d208f47055/tests/src/test/scala/org/json4s/native/FieldSerializerExamples.scala

Другие вопросы по тегам