Gson序列化匿名內部類失敗

2021-08-21 01:50:41 字數 754 閱讀 4788

坑1:我們初始化map之類的集合的時候會用如下優雅的方式:

mapmap = new hashmap() };
gson gson = new gson();

system.out.println(gson.tojson(map));

但是會發現序列化後為null;這是因為上述方式產生的map是匿名內部類的例項,也就是說new出來的map沒有類名,這樣的話gson只知道該類的父類是hashmap而不知道該類。又由於gson是通過類反射得到屬性再序列化,因為不知道類名,所以轉json失敗。

解決辦法,mapmap2=new hashmap(map);後再轉json

坑2:

mapmap = new hashmap() };

set> set2 = map.entryset();

gson gson = new gson();

system.out.println(gson.tojson(set2))

結果為, 如上也是無法轉換json的,這是因為使用map.entryset()方法得到的set集合是乙個內部類,裡面並沒有真正的元素陣列,而是使用外部類hashmap的元素陣列,這時雖然該內部類有類名(hashmap.entryset),但是類裡面沒有元素陣列,以gson通過類來找屬性的時候會發現沒有屬性而轉換失敗

為什麼坑1是null呢:是因為gson連類都沒找到

為什麼坑2是:找到了類,但是沒有元素

Gson如何序列化內部類

1 gson處理成員內部類 1.1 編寫核心類 mainapp package com.yiidian.gson import com.google.gson.gson public class mainapp class student public void setrollno int roll...

gson反序列化localdateTime格式

如果需要反序列化內容是 yyyy mm dd hh mm ss 格式 那麼使用網上搜出來的 gson gson new gsonbuilder registertypeadapter localdatetime.class,new jsondeserializer create 會報錯轉化錯誤。大概...

Gson 序列化物件和反序列化 例項

from 用到的類 class netnews public string getresult public void setresult string result public arraylistgetdata public void setdata arraylistdata public s...