Мне нужно сериализовать события akka в json. На основе «Какую библиотеку JSON использовать в Scala?" я попытался несколько библиотек. Поскольку мой сериализатор ничего не должен знать обо всех моих конкретных событиях, события, состоящие из классов case и объектов case, должны быть сериализованы с использованием отражения. json4s лучше всего соответствует моим требованиям.
class Json4sEventAdapter(system: ExtendedActorSystem) extends EventAdapter {
implicit val formats = Serialization.formats(FullTypeHints(List(classOf[Evt])))
override def toJournal(event: Any): Any = event match {
case e: AnyRef =>
write(e).getBytes(Charsets.UTF_8)}
override def fromJournal(event: Any, manifest: String): EventSeq = event match {
case e: Array[Byte] => {
EventSeq.single(read[Evt](new String(e.map(_.toChar))))}}
Проблема с использованием json4s заключается в том, что независимо от того, какая реализация используется, десериализация объектов создает разные экземпляры. Поскольку мы активно используем сопоставление с образцом для объекта case, это ломает весь наш существующий код.
Итак, мой вопрос: какую библиотеку JSON можно использовать с постоянством scala и akka при хранении объектов case?
Есть ли хотя бы одна библиотека, которая правильно обрабатывает десериализацию объектов case через отражение? - или у кого-нибудь есть хороший обходной путь?