Gson解析泛型

1疫向、json對應(yīng)的model是T
    String json = "{\"content\":\"測試\"}";

    public static <T> T fromJsonToObject(String json, Class<T> clazz) {
        Gson gson = new Gson();
        return gson.fromJson(json, clazz);
    }
2诫龙、json對應(yīng)的model是List<T>
    String json = "[{\"content\":\"測試1\"},{\"content\":\"測試2\"}]";

    /**
     * 將json字符串轉(zhuǎn)換為ArrayList
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> fromJsonToList(String json, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        Gson gson = new Gson();
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for (JsonElement obj : array) {
            list.add(gson.fromJson(obj, clazz));
        }
        return list;
    }
3样屠、json對應(yīng)的model是 model里面包含T
    String json = "{\"code\":\"100\",\"message\":\"測試\",\"data\":{\"content\":\"測試1\"}}";
  • 創(chuàng)建一個和json對應(yīng)的model
/**
 * @author android_wjh
 * @date 2020/6/5
 */
public class DataInfo<T> {
    private String code;
    private String message;
    private T data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
  • 定義一個type
    static ParameterizedType type(final Class raw, final Type... args) {
        return new ParameterizedType() {
            @Override
            public Type[] getActualTypeArguments() {
                return args;
            }

            @Override
            public Type getRawType() {
                return raw;
            }

            @Override
            public Type getOwnerType() {
                return null;
            }
        };
    }
  • 解析數(shù)據(jù)碴里,clazz就是T的實體類歧焦。例如Content.class
        Gson gson = new Gson();
        Type objectType = type(DataInfo.class, clazz);
        DataInfo dataInfo = gson.fromJson(json, objectType);
4移斩、json對應(yīng)的model是 model里面包含List<T>
    String json = "{\"code\":\"100\",\"message\":\"測試\",\"data\":[{\"content\":\"測試1\"},{\"content\":\"測試2\"}]}";
  • 創(chuàng)建一個和json對應(yīng)的model
/**
 * @author android_wjh
 * @date 2020/6/5
 */
public class DataListInfo<T> {
    private String code;
    private String message;
    private List<T> data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }
}
  • 定義一個type
    static ParameterizedType type(final Class raw, final Type... args) {
        return new ParameterizedType() {
            @Override
            public Type[] getActualTypeArguments() {
                return args;
            }

            @Override
            public Type getRawType() {
                return raw;
            }

            @Override
            public Type getOwnerType() {
                return null;
            }
        };
    }
  • 解析數(shù)據(jù),clazz就是T的實體類绢馍。例如Content.class
        Gson gson = new Gson();
        Type objectType = type(DataListInfo.class, clazz);
        DataListInfo dataListInfo = gson.fromJson(json, objectType);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末向瓷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舰涌,更是在濱河造成了極大的恐慌猖任,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓷耙,死亡現(xiàn)場離奇詭異朱躺,居然都是意外死亡,警方通過查閱死者的電腦和手機搁痛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門长搀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸡典,你說我怎么就攤上這事源请。” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵巢钓,是天一觀的道長病苗。 經(jīng)常有香客問我,道長症汹,這世上最難降的妖魔是什么硫朦? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮背镇,結(jié)果婚禮上咬展,老公的妹妹穿的比我還像新娘。我一直安慰自己瞒斩,他們只是感情好破婆,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胸囱,像睡著了一般祷舀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烹笔,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天裳扯,我揣著相機與錄音,去河邊找鬼谤职。 笑死饰豺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的允蜈。 我是一名探鬼主播冤吨,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饶套!你這毒婦竟也來了漩蟆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凤跑,失蹤者是張志新(化名)和其女友劉穎爆安,沒想到半個月后叛复,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仔引,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年褐奥,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖耘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡撬码,死狀恐怖儿倒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤夫否,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布彻犁,位于F島的核電站,受9級特大地震影響凰慈,放射性物質(zhì)發(fā)生泄漏汞幢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一微谓、第九天 我趴在偏房一處隱蔽的房頂上張望森篷。 院中可真熱鬧,春花似錦豺型、人聲如沸仲智。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钓辆。三九已至,卻和暖如春肴焊,著一層夾襖步出監(jiān)牢的瞬間岩馍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工抖韩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛀恩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓茂浮,卻偏偏與公主長得像双谆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子席揽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359