日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java gson序列化_java – Gson多态序列化

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java gson序列化_java – Gson多态序列化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用Gson 2.2.2我正在嘗試序列化POJO(行為)的數(shù)組列表.

我有一個適配器幾乎是我在網(wǎng)上看到的副本:

public class BehaviorAdapter implements JsonSerializer {

private static final String CLASSNAME = "CLASSNAME";

private static final String INSTANCE = "INSTANCE";

@Override

public JsonElement serialize(Behavior src, Type typeOfSrc,

JsonSerializationContext context) {

JsonObject retValue = new JsonObject();

String className = src.getClass().getCanonicalName();

retValue.addProperty(CLASSNAME, className);

JsonElement elem = context.serialize(src);

retValue.add(INSTANCE, elem);

return retValue;

}

}

我這樣注冊:

GsonBuilder builder = new GsonBuilder();

builder.registerTypeHierarchyAdapter(Behavior.class, new BehaviorAdapter());

gson = builder.create();

然后,當(dāng)我嘗試序列化我的ArrayList時:

String json2 = gson.toJson(behaviors);

我得到一個堆棧溢出.

它似乎在線:

JsonElement elem = context.serialize(src);

它啟動一個遞歸循環(huán),一次又一次地通過我的序列化器.那么如何注冊它以便不會發(fā)生這種情況?我需要序列化列表并維護(hù)多態(tài)性.

解決方法:

However, you should never invoke it on the src object itself since that will cause an infinite loop (Gson will call your call-back method again).

我能想到的最簡單的方法是創(chuàng)建一個沒有安裝處理程序的新Gson實例,然后通過它運(yùn)行實例.

作為最終運(yùn)行,您可以序列化List< Behavior>代替:

public class BehaviorListAdapter implements JsonSerializer> {

private static final String CLASSNAME = "CLASSNAME";

private static final String INSTANCE = "INSTANCE";

@Override

public JsonElement serialize(List src, Type typeOfSrc,

JsonSerializationContext context) {

JsonArray array = new JsonArray();

for (Behavior behavior : src) {

JsonObject behaviorJson = new JsonObject();

String className = behavior.getClass().getCanonicalName();

behaviorJson.addProperty(CLASSNAME, className);

JsonElement elem = context.serialize(behavior);

behaviorJson.add(INSTANCE, elem);

array.add(behaviorJson);

}

return array;

}

}

GsonBuilder builder = new GsonBuilder();

// use a TypeToken to make a Type instance for a parameterized type

builder.registerTypeAdapter(

(new TypeToken>() {}).getType(),

new BehaviorListAdapter());

gson = builder.create();

標(biāo)簽:java,gson

來源: https://codeday.me/bug/20190713/1450552.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java gson序列化_java – Gson多态序列化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。