Wie rekursiv serialisiert ein Objekt mit reflektion?

Ich navigieren möchten, um die N-te Ebene eines Objekts, und es zu serialisieren Eigenschaften im String-format.
Zum Beispiel:

class Animal {
   public String name;
   public int weight;
   public Animal friend;
   public Set<Animal> children = new HashSet<Animal>() ;
}

serialisiert werden sollen, wie diese:

{name:"Monkey",
 weight:200,
 friend:{name:"Monkey Friend",weight:300 ,children:{...if has children}},
 children:{name:"MonkeyChild1",weight:100,children:{... recursively nested}}
}

Und Sie können wahrscheinlich feststellen, dass es ähnlich ist zum serialisieren eines Objekts in json. Ich weiß, es sind viele libs(Gson,Jackson...) kann dies tun, können Sie mir einige lehrreiche Ideen, wie diese zu schreiben, indem ich mich?

  • Gibt es einen bestimmten Teil von dem, was erweist sich als schwierig?
  • Wenn Sie wissen, dass es viele Bibliotheken gibt, warum nimmst du nicht einfach eine?
  • Können Sie lassen Sie uns wissen, was Sie versucht haben, so weit, so haben wir einen Ausgangspunkt?
  • Niessner : ich weiß nicht, wie zu kontrollieren ein Feld, das sollte rekursiv serialisiert.
  • Es ist nur die einfache Rekursion: die Introspektion ein Typ (mit super-Typen etc) für Felder, Methoden (siehe JDK-javadocs für die Klasse), finden Sie die tatsächlichen Werte der Felder, die mit java.lang.reflektieren.Feld, Spülen, wiederholen. Und wenn Sie wollen bekommen Sie Lust, im Auge behalten bereits beschlossenen Objekte zu behandeln Zyklen (oder shared refs).
InformationsquelleAutor Sawyer | 2010-04-12
Schreibe einen Kommentar