Подтвердить что ты не робот

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

Спасибо!

4b9b3361

Ответ 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);