forked from exesoft/JSerialize
-
Notifications
You must be signed in to change notification settings - Fork 0
JSerializeWriter
Karol Kokoszka edited this page May 30, 2013
·
1 revision
1. Jak działa JSerializeWriter?
Klasa implementująca ten interfejs działa w poniżej opisany sposób:
- uprzednio sprawdzajac czy obiekt nie jest pusty przechodzi przez wszystkie jego pola
- jezeli pole jest typu privat'e ustawia je na public
- sprawdza czy pole powinno zostac pominiete czy nie, zostaje pominiete w przypdakach kiedy jest typu transient, kiedy nas nie interesuje
- na podstawie typu jaki reprezentuje zostaje podjeta odpowiednia akcja zapisania do mapy danych
- po przejsciu przez wszystkie pola dodaje do mapy pole z nazwa klasy root
- posiada przygotowana mape reprezentujaca obiekt
2. Jak będzie wyglądać przygotowana mapa?
Zakładając, że posiadamy taki kod:
class Osoba {
public Osoba(String name, int age) {
this.name = name;
this.age[0] = age;
}
String name;
int[] age = { 1, 2 };
}
class Rodzina {
public List<Osoba> rodzina = new ArrayList<Osoba>();
}
dalej w main:
Osoba ja = new Osoba("Karol", 10);
Osoba mama = new Osoba("Jola", 30);
Rodzina rodzina = new Rodzina();
rodzina.rodzina.add(ja);
rodzina.rodzina.add(mama);
Po serializacji obiektu klasy Rodzina który będzie zawierał w sobie 2 Osoby mapa będzie wyglądać następująco(Wybaczcie ale nie wiem jak to dobrze sformatować XD):
rodzina#java.util.List = {
elementData#[Ljava.lang.Object;Array=[
{age#intArray=[10, 2], name#java.lang.String={
value#charArray=[K, a, r, o, l]}},
{age#intArray=[30, 2], name#java.lang.String={
value#charArray=[J, o, l, a]}},
]}
#JSerializeMetaData#RootClassName = exesoft.Rodzina
Ogólny schemat jest taki: nazwa_pola # typ_pola = wartosc_pola gdzie wartosc_pola także może być obiektem, może być tablicą itp więc sprawa się po prostu powtarza