Hola ¿Puedo configurar GSON que use int en lugar de los datos de dobles tienes como:Gson uso de fuerza int en lugar de la doble
{fn: chat, data: {roomId: 1, text: "Some brabble"}}
Tengo una PacketClass deserializar a:
public class DataPacket {
private String fn;
private Object p; // will be a StringMap
}
y decodificar como:
DataPacket pkg = gson.fromJson(message, DataPacket.class);
para una mejor typehandling tengo un POJO datos para el campo DataPacket.p por ejemplo:
public class ChatPacket {
public int roomId;
public String message;
public String from;
// getter & setter
}
para analizar los datos para el paquete i uso BeanMaps como (i quitado de manejo de errores, etc):
public Object getData(Class<?> pojoClass) {
pojo = pojoClass.newInstance();
BeanMap b = new BeanMap();
b.setBean(pojo);
b.putAll(this.p);
pojo = b.getBean();
}
El problema es ahora que GSON hacer el roomid: 1 a un doble 1,0 en el StringMap y el mapa de bean intentan analizarlo en un entero y arroja una NumberFormatException, ¿alguien tiene una idea de cómo solucionar esto?
¡Gracias!
Todos los valores numéricos en JSON son punto flotante de precisión doble. JSON no tiene ningún tipo de entero. –
Consideraría esto como una deficiencia mayor de la especificación JSON. Debería definir un tipo de entero simple y no dejar esto en diferentes implementaciones. (I ' Estoy corriendo en esto también. El sistema con el que me estoy comunicando utiliza a Gson y lo convierte en en flotadores, que no se vuelven a convertir en ints ya que hay una pérdida de precisión.) –
Keith, no he notado ninguna pérdida de precisión al hacer lo siguiente: 'final Long lTest = Math.round (doubleValue); Log.i ("Test", String.valueOf (lTest)); // decimal Log.i ("Test", Long.toHexString (lTest)); // hex ' –