У меня есть карта, содержащая смесь типов, как в этом простом примере
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
Можно это как-нибудь исправить? Я ожидаю, что такие простые случаи будут обрабатываться по умолчанию правильно.
Я знаю, что информация о типе не всегда может быть сохранена, и, возможно, 1
и "1"
означают то же самое в JSON. Однако возвращать простые объекты, не содержащие содержимого, для меня просто бессмысленно.
Обновление: Сериализованная версия (то есть string
выше) выглядит нормально:
{"a":1,"b":"a","c":2}