- Баллы
- 21
Была пару лет назад схожая тема, но она не отвечает проблеме.
Я хочу серилизовать ItemStack в jsonb поле БД постгреса.
Известны ли какие то готовые близкие решения (я не нашёл)?
Первая проблема с которой я столкнулся это то что сериализация сериализует только первый уровень вложенности свойств, т.е. сам текущий объект, а меты, зачары и не знаю что может быть ещё не сериализовано.
Я сделал такой вариант сериализации
Выглядит страшненько
Как вы считаете на сколько это рабочий вариант?
Одна проблема у него есть точно. Он все значения полей делает текстом. А на строки так ещё и кавычки дважды ставит.
Я хочу серилизовать ItemStack в jsonb поле БД постгреса.
Известны ли какие то готовые близкие решения (я не нашёл)?
Первая проблема с которой я столкнулся это то что сериализация сериализует только первый уровень вложенности свойств, т.е. сам текущий объект, а меты, зачары и не знаю что может быть ещё не сериализовано.
Я сделал такой вариант сериализации
Код:
public JsonElement Serialize(Object obj) {
Gson gson = new GsonBuilder().create();
if (obj instanceof ConfigurationSerializable) {
JsonObject json = new JsonObject();
Map<String,Object> map = ((ConfigurationSerializable) obj).serialize();
for (String key: map.keySet()) {
json.add(key, Serialize(map.get(key)));
}
return json;
} else if (obj instanceof ImmutableMap) {
JsonObject json = new JsonObject();
for (Object key: ((ImmutableMap) obj).keySet()) {
json.add((String) key, Serialize(((ImmutableMap) obj).get(key)));
}
return json;
} else {
return new JsonPrimitive(gson.toJson(obj));
}
}
Выглядит страшненько
Как вы считаете на сколько это рабочий вариант?Одна проблема у него есть точно. Он все значения полей делает текстом. А на строки так ещё и кавычки дважды ставит.
'{"v":"2865","type":"\"DIAMOND_SWORD\"","meta":{"meta-type":"\"UNSPECIFIC\"","enchants":{"THORNS":"3","PROTECTION_EXPLOSIONS":"4","PROTECTION_FALL":"4"},"repair-cost":"7"}}'