Привет, я могу настроить 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, кто-нибудь понял, как это исправить?
Спасибо!