java – 如何使用GSON序列化地图的地图?
发布时间:2020-12-14 16:20:28 所属栏目:Java 来源:网络整理
导读:我想使用GSON将我的Example类下面的序列化为 JSON. import com.google.gson.Gson;import com.google.gson.GsonBuilder;import java.util.LinkedHashMap;public class Example{ private LinkedHashMapString,Object General; private static final String VER
我想使用GSON将我的Example类下面的序列化为
JSON.
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.LinkedHashMap; public class Example { private LinkedHashMap<String,Object> General; private static final String VERSION="Version"; private static final String RANGE="Range"; private static final String START_TIME="Start_Time"; private static final String END_TIME="End_Time"; public Example() { General = new LinkedHashMap<String,Object>(); General.put(VERSION,"0.1"); LinkedHashMap<String,String> Range = new LinkedHashMap<String,String>(); Range.put(START_TIME,"now"); Range.put(END_TIME,"never"); General.put(RANGE,Range); } public String toJSON() { Gson gson = new GsonBuilder().serializeNulls().create(); return gson.toJson(this); } } 我预计会得到以下输出: {"General":{"Version":"0.1","Range":{"Start_Time":"now","End_Time":"never"}}} 但是调用函数toJSON()返回 {"General":{"Version":"0.1","Range":{}}} 似乎GSON无法序列化Map General中的Map Range.这是GSON的限制还是我在这里做错了? 解决方法
Nishant’s answer的原因是因为Gson的默认构造函数可以使用默认的所有类型的东西,否则您将手动可以使用GsonBuilder.
从JavaDocs:
好的,现在我看看是什么问题.默认的Map序列化程序,如您所料,不支持嵌套映射.正如你在this source snippet from DefaultTypeAdapters中看到的那样(特别是如果你使用一个调试器),变量childGenericType被设置为java.lang.Object类型,因为一些神秘的原因,所以值的运行时类型永远不会被分析. 两个解决方案,我猜: > Implement your own Map serializer / deserializer public String toJSON(){ final Gson gson = new Gson(); final JsonElement jsonTree = gson.toJsonTree(General,Map.class); final JsonObject jsonObject = new JsonObject(); jsonObject.add("General",jsonTree); return jsonObject.toString(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |