2011-11-09 19 views
9

Chciałbym serializować w Scali - widziałem już takie postacie jak sjson i @serializable adnotation - jednak nie byłem w stanie przekonać się, jak je zdobyć, aby poradzić sobie z 1 główną przeszkodą - Type Erasure i Generics in Biblioteki.Serializacja Easy Scala?

Weźmy na przykład bibliotekę Graph for Scala. Używam go w moim kodzie i chciałbym napisać kilka obiektów przechowujących wykresy na dysku w całym kodzie do późniejszej analizy. Jednak wiele razy typy węzłów i krawędzi są enkapsulowane w ogólnych typach argumentów innej klasy, którą mam. Jak mogę poprawnie serializować te klasy, nie modyfikując samej biblioteki, aby poradzić sobie z odbiciem lub "zabrudzeniem" mojego kodu przez zaimportowanie dużej liczby Type Classes (serializacja w zależności od tego, jak obiekt jest oglądany jest w ogóle niesatysfakcjonująca ...)?

Przykład,

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

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

Odpowiedz

5

Aby zgłosić moje wnioski, Java XStream wykonuje fenomenalną pracę - wszystko i wszystko, generyczne lub inne, może być automatycznie serializowane bez żadnych dodatkowych danych wejściowych. Jeśli potrzebujesz szybkiego i bezobsługowego sposobu na przeprowadzenie serializacji, XStream jest to!

Należy jednak zauważyć, że wynikowy kod XML nie będzie szczególnie zwięzły bez własnych danych wejściowych. Na przykład, każdy blok pamięci używany przez HashMap Scala zostanie nagrany, nawet jeśli większość z nich nie zawiera niczego!

2

Jeśli używasz wykresów Scala a jeśli JSON jest Twój formatu serializacji, można korzystać bezpośrednio graph-json.

Oto code and the doc.

+0

Tak, znam tę bibliotekę, ale kluczową kwestią jest to, że wykresy są jednym z elementów o wiele większej układanki! – duckworthd