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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

带有GSON和抽象类的JSON

發布時間:2023/12/3 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带有GSON和抽象类的JSON 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
經過多年使用org.json庫在Java中支持JSON數據交換格式后,我已切換到Google Gson 。 org.json是一個較低級的庫,因此您必須創建JSONObject,JSONArray,JSONString等…并執行其他低級工作。 Gson簡化了這項工作。 它提供了簡單的toJson()和fromJson()方法,可將任意Java對象轉換為JSON,反之亦然,支持Java泛型,允許對象的自定義表示,生成緊湊且可讀性強的JSON輸出,并具有許多其他優點。 我越來越喜歡它。 使用很簡單。 假設我們有一個叫做Circle的類。 public class Circle {private int radius = 10;private String backgroundColor = "#FF0000";private String borderColor = "#000000";private double scaleFactor = 0.5;...// getter / setter }

序列化(Java對象–> JSON)可以如下進行:

Circle circle = new Circle(); Gson gson = new Gson(); String json = gson.toJson(circle); ==> json is {"radius": 10,"backgroundColor": "#FF0000","borderColor": "#000000","scaleFactor": 0.5,... }

反序列化(JSON –> Java對象)只是一行代碼:

Circle circle2 = gson.fromJson(json, Circle.class); ==> circle2 is the same as the circle above

一切都像魅力。 我只遇到抽象類一個問題。 假設,我們有一個抽象類AbstractElement和許多其他類來擴展這一類

public abstract class AbstractElement {private String uuid;// getter / setter }public class Circle extends AbstractElement {... }public class Rectangle extends AbstractElement {... }public class Ellipse extends AbstractElement {... }

現在假定,我們將所有具體類存儲在使用AbstractElement參數化的列表或映射中

public class Whiteboard {private Map<String, AbstractElement> elements = new LinkedHashMap<String, AbstractElement>();... }

問題是在反序列化期間未公開具體類。 在Whiteboard的JSON表示中未知。 如何從JSON表示形式實例化正確的Java類并將其放入Map <String,AbstractElement>元素中? 我在文檔中找不到解決該問題的方法。 顯然,我們需要在有關具體類的JSON表示中存儲元信息。 這是肯定的。 Gson允許您注冊自己的自定義序列化器和反序列化器。 這是Gson的強大功能。 有時默認表示不是您想要的。 例如在處理第三方庫類時,通常就是這種情況。 有足夠的示例說明如何編寫自定義序列化器/反序列化器。 我將創建一個實現兩個接口JsonSerializer,JsonDeserializer的適配器類,并將其注冊為我的抽象類AbstractElement。

GsonBuilder gsonBilder = new GsonBuilder(); gsonBilder.registerTypeAdapter(AbstractElement.class, new AbstractElementAdapter()); Gson gson = gsonBilder.create();

這是AbstractElementAdapter:

package com.googlecode.whiteboard.json;import com.google.gson.*; import com.googlecode.whiteboard.model.base.AbstractElement; import java.lang.reflect.Type;public class AbstractElementAdapter implements JsonSerializer<AbstractElement>, JsonDeserializer<AbstractElement> {@Overridepublic JsonElement serialize(AbstractElement src, Type typeOfSrc, JsonSerializationContext context) {JsonObject result = new JsonObject();result.add("type", new JsonPrimitive(src.getClass().getSimpleName()));result.add("properties", context.serialize(src, src.getClass()));return result;}@Overridepublic AbstractElement deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)throws JsonParseException {JsonObject jsonObject = json.getAsJsonObject();String type = jsonObject.get("type").getAsString();JsonElement element = jsonObject.get("properties");try {return context.deserialize(element, Class.forName("com.googlecode.whiteboard.model." + type));} catch (ClassNotFoundException cnfe) {throw new JsonParseException("Unknown element type: " + type, cnfe);}} }

我添加了兩個JSON屬性-一個是“類型”,另一個是“屬性”。 第一個屬性保存AbstractElement的具體實現類(簡單名稱),第二個屬性保存序列化對象本身。 JSON看起來像

{"type": "Circle","properties": {"radius": 10,"backgroundColor": "#FF0000","borderColor": "#000000","scaleFactor": 0.5,...} }

反序列化期間,我們受益于“類型”屬性。 現在可以通過Class.forName(“ com.googlecode.whiteboard.model。” + type)實例化具體類,其中“ com.googlecode.whiteboard.model”。 + type是完全限定的類名。 以下通話

public <T> T deserialize(JsonElement json, Type typeOfT) throws JsonParseException

JsonDeserializationContext中的from會在指定對象上調用默認的反序列化并完成作業。

參考: 帶有GSON的JSON和來自JCG合作伙伴 Oleg Varaksin的抽象類 , 位于軟件開發博客上。


翻譯自: https://www.javacodegeeks.com/2012/04/json-with-gson-and-abstract-classes.html

總結

以上是生活随笔為你收集整理的带有GSON和抽象类的JSON的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色伊人网 | jizz处女| 精品国产一区二区三区无码 | 黄色av免费| av一级大片| 日b视频在线观看 | 亚洲精品视频在线观看免费 | 一眉道姑| 色综合天天 | 五月天婷婷在线播放 | 越南a级片 | 羞羞的视频网站 | 日批免费看 | 国产精品美女一区二区 | 日韩一级片免费看 | 男生和女生差差视频 | 日本久久激情 | 99999视频| 波多野结衣av中文字幕 | 欧美成人性生活视频 | 精品熟女一区二区三区 | 婷婷色在线观看 | 国产精品久久一区二区三区 | 中国黄色免费 | 天天爱天天色 | 亚洲最黄网站 | 91精品国产乱码在线观看 | 波多野结衣乳巨码无在线 | 亚洲av成人精品一区二区三区在线播放 | 午夜资源站 | 国产精品久久久久三级 | 日韩亚洲一区二区三区 | 亚洲综合成人在线 | 国产高清成人久久 | 欧美精品一二 | 亚欧在线免费观看 | 激情视频网 | 欧美在线视频一区 | 久草观看视频 | 精品视频免费看 | 黑人极品ⅴideos精品欧美棵 | 久久精品99久久 | 久久免费国产 | 日本视频黄 | 欧美xxxx黑人xyx性爽 | 内射无码专区久久亚洲 | 99999av| 综合久久久久久久久久久 | 亚洲欧美色图在线 | 国产伦精品一区二区三区高清 | 国产另类自拍 | 久久久久久久久久久久久久久久久久久 | 久久精品亚洲一区二区 | 精品人妻一区二区三区四区久久 | 窝窝视频在线 | 91久久精品日日躁夜夜躁国产 | 亚洲一区免费在线 | 中文字幕高潮 | 欧美极品一区二区三区 | 8mav在线| 亚洲一区视频网站 | 日韩国产一区二区三区 | 九九久久免费视频 | 成人免费看片39 | 日韩黄色片 | 欧美激情一二区 | 可以在线观看的黄色 | 国产在线观看中文字幕 | 一级特黄a大片免费 | 草草在线观看 | 操操操免费视频 | 国产一级久久久久毛片精品 | 西野翔夫の目の前で犯在线 | 男人天堂1024| 亚洲免费视频网站 | 动漫美女视频 | 男人的av | 91久久久久国产一区二区 | 泰坦尼克号3小时49分的观看方法 | 欧美绿帽合集xxxxx | 美女视频毛片 | 性——交——性——乱免费的 | 亚洲AV无码久久精品国产一区 | 视屏一区 | 美女隐私免费看 | 国产精品亚州 | 国产精品久久久久久 | 黄色网址大全免费 | 久久综合狠狠综合久久综合88 | 国产日韩欧美精品一区二区 | 网友自拍第一页 | 亚洲天堂美女视频 | 日韩专区一区 | 制服丝袜国产精品 | 国产精品九九九九 | 极品久久久 | 黄视频网站在线看 | 日本在线视频www色 国产在线视频网址 | 日韩免费播放 |