Hi mogę skonfigurować gson że używać int zamiast podwójnych danych GOT jak:Gson użycie siły int zamiast podwójnego
{fn: chat, data: {roomId: 1, text: "Some brabble"}}
mam PacketClass deserializować go:
public class DataPacket {
private String fn;
private Object p; // will be a StringMap
}
i dekodować jak:
DataPacket pkg = gson.fromJson(message, DataPacket.class);
dla lepszej typehandling dostałem POJO danych dla pola DataPacket.p na przykład:
public class ChatPacket {
public int roomId;
public String message;
public String from;
// getter & setter
}
do analizowania danych pakietu i wykorzystać BeanMaps jak (i usunięto obsługę błędów itp):
public Object getData(Class<?> pojoClass) {
pojo = pojoClass.newInstance();
BeanMap b = new BeanMap();
b.setBean(pojo);
b.putAll(this.p);
pojo = b.getBean();
}
Problemem jest to, że teraz gson dokonać roomId: 1 do podwójnego 1,0 w The StringMap i beanmap próbują parsować ją do liczby całkowitej i generują wyjątek NumberFormatException, każdy ma pomysł, jak to naprawić?
Dziękujemy!
Wszystko wartości liczbowe w JSON są zmiennoprzecinkowymi podwójną precyzją JSON nie ma typu całkowitoliczbowego –
Uznałbym to za poważny niedobór specyfikacji JSON.Trzeba zdefiniować prosty typ całkowity i nie pozostawiać tego różnym implementacjom. m również w to działa.Komór, z którym się komunikuję, używa Gsona i zamienia ints w płaszcze, które nie konwertują z powrotem na ints, ponieważ występuje utrata precyzji.) –
Keith, nie zauważyłem żadnej utraty dokładności podczas wykonywania następujących czynności: 'final Long lTest = Math.round (doubleValue); Log.i ("Test", String.valueOf (lTest)); // dziesiętny Log.i ("Test", Long.toHexString (lTest)); // hex' –