Gson-Serialisierung polymorpher Objektlisten
Gson bietet eine Lösung zur Serialisierung polymorpher Objekte mithilfe von RuntimeTypeAdapterFactory. Diese Klasse übernimmt automatisch die Serialisierung geerbter Mitglieder, sodass keine benutzerdefinierten Serialisierer geschrieben werden müssen.
Implementierung
Um RuntimeTypeAdapterFactory zu verwenden, befolgen Sie diese Schritte:
Beispiel
<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); 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>
Ausgabe
<code class="json">{ "type": "ObixBaseObj", "obix": "obj", "is": "obix:Lobby", "children": [ { "type": "ObixOp", "in": "obix:BatchIn", "out": "obix:BatchOut", "obix": "op", "name": "batch", "children": [] } ] }</code>
Erweiterter Anwendungsfall
Um eine große Anzahl von Unterklassen zu verarbeiten, erstellen Sie eine Dienstprogrammklasse wie GsonUtils, um die Registrierung zu verwalten und eine zentralisierte Gson-Instanz bereitzustellen.
<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(); } } public class ObixBaseObj { private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); private static final HashSet<Class<?>> registeredClasses= new HashSet<>(); static { GsonUtils.registerType(adapter); } private synchronized void registerClass() { if (!registeredClasses.contains(this.getClass())) { registeredClasses.add(this.getClass()); adapter.registerSubtype(this.getClass()); } } public ObixBaseObj() { registerClass(); obix = "obj"; } } public class ObixOp extends ObixBaseObj { private String in; private String out; public ObixOp() { super(); obix = "op"; } public ObixOp(String in, String out) { super(); obix = "op"; this.in = in; this.out = out; } }</code>
Mit diesem Ansatz werden alle geerbten Mitglieder polymorpher Objekte automatisch übernommen serialisiert und deserialisiert und bietet eine praktische Lösung für die Handhabung komplexer Vererbungshierarchien.
Das obige ist der detaillierte Inhalt vonWie serialisieren Sie polymorphe Objektlisten mit Gson mithilfe von RuntimeTypeAdapterFactory?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!