Gson force использует int вместо double
Привет, я могу настроить gson, чтобы он использовал int вместо двух полученных данных:
{fn: chat, data: {roomId: 1, text: "Some brabble"}}
Я получил PacketClass для десериализации его:
public class DataPacket {
private String fn;
private Object p; // will be a StringMap
}
и декодировать как:
DataPacket pkg = gson.fromJson(message, DataPacket.class);
для лучшего управления типом я получил поле данных для поля DataPacket.p, например:
public class ChatPacket {
public int roomId;
public String message;
public String from;
// getter & setter
}
для анализа данных в пакет я используйте BeanMaps, например (я удалил обработку ошибок и т.д.):
public Object getData(Class<?> pojoClass) {
pojo = pojoClass.newInstance();
BeanMap b = new BeanMap();
b.setBean(pojo);
b.putAll(this.p);
pojo = b.getBean();
}
Проблема в том, что gson делает roomId: 1 равным 1.0 в StringMap, и beanmap пытается разобрать его на целое число и генерирует исключение NumberFormatException, кто-нибудь понял, как это исправить?
Спасибо!
Ответы
Ответ 1
Я думаю, вы могли бы просто изменить свой класс DataPacket на
public class DataPacket {
private String fn;
private ChatPacket p; // will be a StringMap
}
(замените объект ChatPacket) - если это подходит для остальной части вашего приложения. Затем Gson распознает типы данных класса ChatPacket и будет характеризовать "1" как int.
EDIT (поскольку вы не можете использовать полные функции форматирования в комментариях:-()
Вы можете использовать комбинацию Gson и ее младшего помощника JsonParser следующим образом:
String testStr = "{fn: chat, data: {roomId: 1, message: \"Some brabble\"}}";
DataPacket dp = new Gson().fromJson(testStr, DataPacket.class);
JsonParser parser = new JsonParser();
JsonElement e = parser.parse(testStr);
ChatPacket cp = new Gson().fromJson(e.getAsJsonObject().getAsJsonObject("data"), ChatPacket.class);