Gson serialisiert eine Liste polymorpher Objekte
Ich versuche, ein Objekt, das Polymorphismus beinhaltet, mit Gson in JSON zu serialisieren / zu deserialisieren.
Dies ist mein Code für die Serialisierung:
ObixBaseObj lobbyObj = new ObixBaseObj();
lobbyObj.setIs("obix:Lobby");
ObixOp batchOp = new ObixOp();
batchOp.setName("batch");
batchOp.setIn("obix:BatchIn");
batchOp.setOut("obix:BatchOut");
lobbyObj.addChild(batchOp);
Gson gson = new Gson();
System.out.println(gson.toJson(lobbyObj));
Hier ist das Ergebnis:
{"obix":"obj","is":"obix:Lobby","children":[{"obix":"op","name":"batch"}]}
Die Serialisierung funktioniert größtenteils, mit der Ausnahme, dass der Inhalt der geerbten Mitglieder fehlt (insbesondereobix:BatchIn
undobixBatchout
Zeichenfolgen fehlen). Hier ist meine Basisklasse:
public class ObixBaseObj {
protected String obix;
private String display;
private String displayName;
private ArrayList<ObixBaseObj> children;
public ObixBaseObj()
{
obix = "obj";
}
public void setName(String name) {
this.name = name;
}
...
}
So sieht meine geerbte Klasse (ObixOp) aus:
public class ObixOp extends ObixBaseObj {
private String in;
private String out;
public ObixOp() {
obix = "op";
}
public ObixOp(String in, String out) {
obix = "op";
this.in = in;
this.out = out;
}
public String getIn() {
return in;
}
public void setIn(String in) {
this.in = in;
}
public String getOut() {
return out;
}
public void setOut(String out) {
this.out = out;
}
}
Mir ist klar, dass ich dafür einen Adapter verwenden könnte, aber das Problem ist, dass ich eine Sammlung von Basisklassentypen serialisiereObixBaseObj
. Es gibt ungefähr 25 Klassen, die davon erben. Wie kann ich das elegant machen?