- Сообщения
- 580
- Решения
- 27
Мне нужно где-то сохранить данные моих объектов, и поскольку YAML слишком медленный, а прикручивать БД ради пары фич слишком затратно, мой выбор пал на Json, тем более что библиотека уже используется ядром.
Всё бы ничего, объект отлично сериализовался. Мне даже удалось его восстановить обратно. С проблемой же я столкнулся при сериализации и десериализации Map (HashMap'ы конкретнее).
В чём проблема? HashMap отлично сериализуется в JSON.
Зелёный - HashMap, красный - первый объект, синий - второй объект. Вместе это образует такой JSON.
Но обратно из этого JSON восстановить ничего не выходит. Либо HashMap получается пустым, либо содержит десериализованные объекты, которые тоже восстановить не выходит.
В втором случае Map.toString() выглядела так:
В голову мне пришла мысль, что вероятно мне нужно дополнительно десериализовывать помимо мапы еще и каждый объект в ней, таким образом я десериализовывал мапу, создавал вторую, пробегался циклом по первой, десериализовывал каждый объект в ней, отправляя его во вторую мапу, и возвращал её.
В итоге я пришел к следующему классу для обработки моих объектов:
Он, увы, не заработал, возвращая ту самую пустую мапу, состоящую из одних только скобок.
Получаю:
Получаю:
Сижу с 14-го числа над этой ошибкой, я без понятия уже что делать. Есть идеи?
Всё бы ничего, объект отлично сериализовался. Мне даже удалось его восстановить обратно. С проблемой же я столкнулся при сериализации и десериализации Map (HashMap'ы конкретнее).
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Но обратно из этого 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());
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Java:
String json = GsonSerializer.serializeObject(Radiostation.stations); // хешмапа с моими объектами
p.sendMessage(json); // десериализованная хешмапа
Map<?, ?> map = (Map<?, ?>) GsonSerializer.deserializeMapWithObjects(json, Radiostation.class); // восстанавливаю
p.sendMessage(map.toString()); //
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Сижу с 14-го числа над этой ошибкой, я без понятия уже что делать. Есть идеи?