我有一个Map(映射)包括多种类型,就像这个简单的例子一样
final Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("a", 1);
map.put("b", "a");
map.put("c", 2);
final Gson gson = new Gson();
final String string = gson.toJson(map);
final Type type = new TypeToken<LinkedHashMap<String, Object>>(){}.getType();
final Map<Object, Object> map2 = gson.fromJson(string, type);
for (final Entry<Object, Object> entry : map2.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
我得到的是普通的
Object
,没有Integer
或String
。输出看起来像这样:a : java.lang.Object@48d19bc8
b : java.lang.Object@394a8cd1
c : java.lang.Object@4d630ab9
有没有什么办法可以修复它?我期望这样简单的情况应该默认正确处理。
我知道关于类型的信息并不总是能够被保留下来,也可能在JSON中1
和"1"
恰好表示相同的含义。然而,返回纯粹没有内容的对象对我来说毫无意义。
更新:序列化版本(即上面的string
)看起来很好:
{"a":1,"b":"a","c":2}
final String string
是什么样子吗?我相信这会有助于理解问题。 - Jean Hominal