Простая сериализация Scala?

#scala #serialization

#scala #сериализация

Вопрос:

Я хотел бы выполнить сериализацию в Scala — я видел подобные sjson и аннотацию @serializable — однако я не смог понять, как заставить их справиться с одним серьезным препятствием — стиранием типов и дженериками в библиотеках.

Возьмем, к примеру, график для библиотеки Scala. Я активно использую это в своем коде и хотел бы записать несколько объектов, содержащих графики, на диск по всему моему коду для последующего анализа. Однако часто типы node и edge инкапсулируются в аргументы универсального типа другого класса, который у меня есть. Как я могу правильно сериализовать эти классы, не изменяя саму библиотеку, чтобы справиться с отражением, или «загрязняя» мой код, импортируя большое количество классов типов (сериализация в соответствии с тем, как просматривается объект, в любом случае совершенно неудовлетворительна …)?

Пример,

 class Container[N](val g: Graph[N,DiEdge]) {
   ...
}

// in another file
def myMethod[N](container: Container[N]): Unit = {
   <serialize container somehow here>
}
  

Ответ №1:

Чтобы сообщить о моих выводах, XStream в Java выполняет феноменальную работу — что угодно, будь то дженерики или иное, может быть автоматически сериализовано без какого-либо дополнительного ввода. Если вам нужен быстрый и не требующий особых усилий способ запустить сериализацию, XStream — это он!

Однако следует отметить, что выходной XML-файл не будет особенно кратким без вашего собственного ввода. Например, каждый блок памяти, используемый HashMap в Scala, будет записан, даже если большинство из них ничего не содержат!

Ответ №2:

Если вы используете графики для Scala и если JSON является вашим форматом сериализации, вы можете использовать напрямую graph-json .

Вот код и документ.

Комментарии:

1. Да, я в курсе библиотеки, но ключевой момент в том, что графики — это одна часть гораздо большей головоломки!