Rumah > Java > javaTutorial > teks badan

Bagaimanakah anda menyusun senarai objek polimorfik dengan Gson menggunakan RuntimeTypeAdapterFactory?

Barbara Streisand
Lepaskan: 2024-10-30 15:13:02
asal
312 orang telah melayarinya

How do you serialize polymorphic object lists with Gson using RuntimeTypeAdapterFactory?

Pensirilan Gson bagi Senarai Objek Polimorfik

Gson menyediakan penyelesaian untuk mensirikan objek polimorfik menggunakan RuntimeTypeAdapterFactory. Kelas ini secara automatik mengendalikan penyirian ahli yang diwarisi, menghapuskan keperluan untuk menulis penyeri tersuai.

Pelaksanaan

Untuk menggunakan RuntimeTypeAdapterFactory, ikut langkah berikut:

  1. Buat instance RuntimeTypeAdapterFactory untuk kelas asas ObixBaseObj.
  2. Daftar semua subkelas ObixBaseObj menggunakan registerSubtype().
  3. Sediakan RuntimeTypeType menggunakan

Contoh

<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>
Salin selepas log masuk

Output

<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>
Salin selepas log masuk

Kes Penggunaan Terperinci

Untuk mengendalikan sejumlah besar subkelas, cipta kelas utiliti seperti GsonUtils untuk mengurus pendaftaran dan menyediakan tika Gson terpusat.

<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>
Salin selepas log masuk
Dengan pendekatan ini, semua ahli warisan objek polimorfik akan secara automatik bersiri dan dinyahsiri, menyediakan penyelesaian yang mudah untuk mengendalikan hierarki warisan yang kompleks.

Atas ialah kandungan terperinci Bagaimanakah anda menyusun senarai objek polimorfik dengan Gson menggunakan RuntimeTypeAdapterFactory?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!