2011-11-09 3 views
9

Я хотел бы сериализоваться в Scala - я видел подобных sjson и @serializable аннотации - однако, я не смог понять, как заставить их иметь дело с 1 основным препятствием - Type Erasure и Дженерики в библиотеках.Простая сериализация Scala?

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

Пример,

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

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

ответ

5

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

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

2

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

Адрес code and the doc.

+0

Да, я знаю об библиотеке, но ключевым моментом является то, что графики - это одна часть гораздо большей головоломки! – duckworthd