【发布时间】:2018-09-17 19:01:22
【问题描述】:
我有一个需要序列化的 hashmap 的 hashmap ( Map ) ,目前只处理字符串。 目前使用gson进行序列化。
{cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58={tz:"eeee" dis:"aaaa" geoAddr:"cccc,dddd" id:@cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58 geoState:"dddd" area :1000ft² geoCity:"cccc" bbbb}}
Gson gson = new GsonBuilder().create();
String string = gson.toJson(map);
但似乎通过添加中间键值对和哈希码来改变整体结构,如下所示。
{"cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58":{"map":{"tz":{"val":"eeee"},"dis":{"val":"aaaa"}, "geoAddr":{"val":"cccc,dddd"},"id":{"val":"cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58"},"geoState":{"val":"dddd" },"area":{"val":1000.0,"unit":"ft²"},"geoCity":{"val":"cccc"},"bbbb":{}},"hashCode":0} }
当我将它反序列化回 Map 时,我最终得到了额外的键值对。
Gson gson = new Gson();
Type listType = new TypeToken<Map<String, Map>>()
{
}.getType();
map = gson.fromJson(string, listType);
{cb9b4b3d-8d2e-41b2-9a21-1657dbd14f58={map={tz={val=eeee}, dis={val=aaaa}, geoAddr={val=cccc,dddd}, id={val=cb9b4b3d -8d2e-41b2-9a21-1657dbd14f58}, geoState={val=dddd}, area={val=1000.0, unit=ft²}, geoCity={val=cccc}, bbbb={}}, hashCode=0.0}}
有没有办法可以将它反序列化为与原来相同的结构。我使用了一个不理解这个反序列化地图的第三方库。
【问题讨论】:
-
你用的是什么版本的gson?我用 2.8 对此进行了测试,它用原始值序列化了地图。
-
你在序列化什么
Map类? -
我也使用 2.8 并且序列化/反序列化工作。但是反序列化的地图看起来与我最初拥有的不同,就像问题一样。
-
这是一个地图
> -
具体实现是什么(即是
HashMap还是别的什么)?当我使用HashMap进行测试时,我没有看到这种行为。
标签: java serialization gson