Rumah >Java >javaTutorial >Bagaimana untuk Mensiri Senarai Objek Polimorfik dengan Gson Menggunakan RuntimeTypeAdapterFactory?
Cara Mensiri Senarai Objek Polimorfik dengan Gson
Apabila berurusan dengan objek polimorfik semasa bersiri, pewarisan dan hierarki kelas boleh menimbulkan cabaran. Satu kaedah untuk menangani perkara ini secara elegan ialah melalui RuntimeTypeAdapterFactory Gson.
Mari kita pertimbangkan contoh di mana kita mempunyai kelas asas, ObixBaseObj dan kelas kanak-kanak, ObixOp. Matlamat kami adalah untuk menyirikan tika ObixBaseObj yang mengandungi koleksi kanak-kanak, termasuk ObixOp.
Dalam coretan kod pertama, kami menghadapi isu di mana ahli yang diwarisi (khususnya, rentetan masuk dan keluar) tiada semasa penyirian . Penyelesaiannya terletak pada penggunaan 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>
Contoh Kerja
Untuk senario di mana berbilang subkelas mewarisi daripada ObixBaseObj, kami boleh melaksanakan mekanisme pendaftaran tersuai dalam ObixBase dan menggunakan kelas utiliti, 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>
Dalam 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>
Pendekatan ini memudahkan penyirian objek polimorfik dengan mendaftarkan subkelas secara automatik dan memastikan ahli yang diwarisi dimasukkan dalam output bersiri.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri Senarai Objek Polimorfik dengan Gson Menggunakan RuntimeTypeAdapterFactory?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!