Сериализация и десериализация JSON в Gson Map<?, ?>

q20w26a

Разработчик
Мне нужно где-то сохранить данные моих объектов, и поскольку YAML слишком медленный, а прикручивать БД ради пары фич слишком затратно, мой выбор пал на Json, тем более что библиотека уже используется ядром.
Всё бы ничего, объект отлично сериализовался. Мне даже удалось его восстановить обратно. С проблемой же я столкнулся при сериализации и десериализации Map (HashMap'ы конкретнее).
1581844009481.png1581844419574.png
В чём проблема? HashMap отлично сериализуется в JSON.
1581844568386.png
Зелёный - HashMap, красный - первый объект, синий - второй объект. Вместе это образует такой JSON.
Но обратно из этого JSON восстановить ничего не выходит. Либо HashMap получается пустым, либо содержит десериализованные объекты, которые тоже восстановить не выходит.
В втором случае Map.toString() выглядела так:
JavaScript:
{1={id=1.0, name=test}, 2={id=2.0, name=test-2}}
В голову мне пришла мысль, что вероятно мне нужно дополнительно десериализовывать помимо мапы еще и каждый объект в ней, таким образом я десериализовывал мапу, создавал вторую, пробегался циклом по первой, десериализовывал каждый объект в ней, отправляя его во вторую мапу, и возвращал её.
В итоге я пришел к следующему классу для обработки моих объектов:
Java:
public class GsonSerializer {
    public static String serializeObject(Object object) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(object, object.getClass());
    }

    public static Map<?, ?> deserializeMapWithObjects(String json, Class<?> objClass) {
        Map<?, ?> map = new Gson().fromJson(json, HashMap.class);
        Map<Integer, Object> map2 = new HashMap<Integer, Object>();
        for (int i = 1; i < map.size(); i++) {
            Object o = deserializeObject(json, objClass);
            map2.put(i, o);
        }
        return map2;
    }

    public static Object deserializeObject(String json, Class<?> clazz) {
        return new Gson().fromJson(json, clazz);
    }
}
Он, увы, не заработал, возвращая ту самую пустую мапу, состоящую из одних только скобок.
Java:
        String json = GsonSerializer.serializeObject(Radiostation.stations); // хешмапа с моими объектами
        p.sendMessage(json); // десериализованная хешмапа
        Map<?, ?> map = (Map<?, ?>) GsonSerializer.deserializeObject(json, HashMap.class); // восстанавливаю
        p.sendMessage(map.toString());
Получаю: 1581845601397.png
Java:
        String json = GsonSerializer.serializeObject(Radiostation.stations); // хешмапа с моими объектами
        p.sendMessage(json); // десериализованная хешмапа
        Map<?, ?> map = (Map<?, ?>) GsonSerializer.deserializeMapWithObjects(json, Radiostation.class); // восстанавливаю
        p.sendMessage(map.toString()); //
Получаю: 1581845733180.png

Сижу с 14-го числа над этой ошибкой, я без понятия уже что делать. Есть идеи?
 

BlackBarcode13

Разработчик
q20w26a, глянь мой плагин RandomHub. В нем конфигурация на JSON и сериализируется/десериализируется все подряд. А вообще, в идеале юзать JacksonApi.
 

q20w26a

Разработчик
mc923, спасибо, посмотрю. Хотел Jackson, но таскать его не очень охота было за собой ради пары небольших сохранений. Сейчас уже не надо, но в дальейшем я думаю пригодиться.
 

Комнаты в чате

Верх Низ