


Bagaimanakah saya boleh menyusun objek polimorfik dengan Gson dan memastikan semua medan disertakan dalam output JSON?
Pensirian Objek Polimorfik dengan Gson
Gson menyediakan sokongan menyeluruh untuk mensiri objek polimorfik dalam format JSON. Polimorfisme timbul apabila objek mempunyai kelas asas yang dikongsi tetapi pelaksanaan yang berbeza. Untuk menyerikan objek sedemikian dengan berkesan, Gson menawarkan ciri yang dikenali sebagai RuntimeTypeAdapterFactory.
Pertimbangkan senario berikut: anda mempunyai kelas asas ObixBaseObj dan berbilang kelas anak yang diwarisi daripadanya, seperti ObixOp. Apabila mensiri objek jenis ObixBaseObj yang mengandungi objek kanak-kanak, tingkah laku lalai Gson adalah untuk hanya mensiri medan yang ditakrifkan dalam kelas asas. Ini boleh mengakibatkan pengabaian medan tertentu daripada kelas kanak-kanak.
Untuk menangani perkara ini, anda boleh menggunakan RuntimeTypeAdapterFactory. Ia membolehkan anda mendaftarkan subjenis yang berbeza di bawah penyesuai jenis tunggal. Dengan berbuat demikian, Gson boleh secara berkesan mensiri medan khusus untuk setiap subjenis, memberikan perwakilan lengkap objek polimorfik.
<code class="java">RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory .of(ObixBaseObj.class) .registerSubtype(ObixBaseObj.class) .registerSubtype(ObixOp.class);</code>
Kod di atas mendaftarkan kedua-dua subjenis ObixBaseObj dan ObixOp dengan penyesuai. Ia kemudiannya boleh disepadukan ke dalam konfigurasi Gson untuk mendayakan siri polimorfik:
<code class="java">Gson gson2=new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(adapter).create();</code>
Dengan menggunakan contoh Gson yang diubah suai ini, objek polimorfik boleh disiri dan dinyahsiri dengan berkesan, dengan tepat memelihara medan yang diwarisi daripada kelas asas dan khusus kelas kanak-kanak.
Sebagai alternatif, anda boleh melaksanakan penyelesaian yang lebih mantap dan berskala dengan memanfaatkan kelas 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>
Dalam ObixBaseObj dan kelas anaknya, anda boleh menggunakan GsonUtils untuk memastikan subjenis itu pendaftaran dilakukan secara automatik:
<code class="java">public class ObixBaseObj { private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); private static final HashSet<Class<?>> registeredClasses= new HashSet<Class<?>>(); 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"; } }</code>
Dengan pendekatan ini, setiap kali kejadian kelas asas atau kanak-kanak dicipta, ia akan mendaftarkan subjenisnya secara automatik dengan RuntimeTypeAdapterFactory, memastikan pensirilan menyeluruh.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyusun objek polimorfik dengan Gson dan memastikan semua medan disertakan dalam output JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
