Поддержка 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