Heim >Java >javaLernprogramm >Wie serialisiere ich eine Liste polymorpher Objekte mit Gson mithilfe von RuntimeTypeAdapterFactory?
So serialisieren Sie eine Liste polymorpher Objekte mit Gson
Beim Umgang mit polymorphen Objekten während der Serialisierung können Vererbung und Klassenhierarchie Herausforderungen darstellen. Eine Methode, dies elegant anzugehen, ist die RuntimeTypeAdapterFactory von Gson.
Betrachten wir ein Beispiel, in dem wir eine Basisklasse, ObixBaseObj, und eine untergeordnete Klasse, ObixOp, haben. Unser Ziel ist es, eine Instanz von ObixBaseObj zu serialisieren, die eine Sammlung von untergeordneten Elementen enthält, einschließlich ObixOp.
Im ersten Codeausschnitt stoßen wir auf ein Problem, bei dem geerbte Mitglieder (insbesondere In- und Out-Strings) während der Serialisierung fehlen . Die Lösung liegt in der Verwendung von RuntimeTypeAdapterFactory:
<code class="java">RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory .of(ObixBaseObj.class) .registerSubtype(ObixBaseObj.class) .registerSubtype(ObixOp.class); Gson gson2=new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(adapter).create(); System.out.println(gson2.toJson(lobbyObj));</code>
Arbeitsbeispiel
Für ein Szenario, in dem mehrere Unterklassen von ObixBaseObj erben, können wir einen benutzerdefinierten Registrierungsmechanismus in ObixBaseObj implementieren und Verwenden Sie eine Dienstprogrammklasse, GsonUtils:
<code class="java">public class ObixBaseObj { // ... private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); public static void registerType( RuntimeTypeAdapterFactory<?> adapter) { GsonUtils.registerType(adapter); } // ... } public class ObixOp extends ObixBaseObj { // ... public ObixOp() { super(); obix = "op"; } // ... }</code>
In GsonUtils:
<code class="java">public class GsonUtils { private static final GsonBuilder gsonBuilder = new GsonBuilder() .setPrettyPrinting(); public static void registerType( RuntimeTypeAdapterFactory<?> adapter) { gsonBuilder.registerTypeAdapterFactory(adapter); } public static Gson getGson() { return gsonBuilder.create(); } }</code>
<code class="java">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 = GsonUtils.getGson(); System.out.println(gson.toJson(lobbyObj));</code>
Dieser Ansatz vereinfacht die Serialisierung polymorpher Objekte, indem Unterklassen automatisch registriert und sichergestellt werden, dass geerbte Mitglieder enthalten sind in der serialisierten Ausgabe.
Das obige ist der detaillierte Inhalt vonWie serialisiere ich eine Liste polymorpher Objekte mit Gson mithilfe von RuntimeTypeAdapterFactory?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!