Gson Long потерял данные при разборе со строки
У меня есть строковое представление JSON некоторых объектов класса объектов
public class SMPBBaseObjectsList {
public ArrayList<Object> data = new ArrayList<>();
public Integer count;
public Integer limitFrom;
public Integer limitTo;
public Boolean hasMore;
public String dataItemsClass;
}
И у меня есть JSON
{ "ClassItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "данные": [{ "ID": 1374046117510970000,» Имя ":" Test3" , "classItem": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013"}], "фильтр": { "OrderItems": [], "filterItems": []} }
Я пытаюсь разобрать этот JSON и создать объект моего класса с помощью следующего кода:
String json = "{\"classItem\":\"smpb.utility.classes.SMPBBaseObjectsList\",\"dataItemsClass\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\",\"data\":[{\"id\":1374046117510970000,\"Name\":\"Test3\",\"classItem\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\"}],\"filter\":{\"orderItems\":[],\"filterItems\":[]}}";
SMPBBaseObjectsList list = new GsonBuilder().create().fromJson(json, SMPBBaseObjectsList.class);
System.out.println("BEFORE:" + json);
System.out.println("AFTER: " + list);
Системные выходы:
ДО:{ "ClassItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "данные": [{"Идентификатор": 1374044905885298000, "Имя": "TEST3", "classItem": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013"}], "фильтр": { "OrderItems": [], "filterItems": [ ]}}
ПОСЛЕ: { "ClassItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "данные": [{ "Имя": "Test3" ,"Идентификатор": 1.374044905885298011E18, "ClassItem": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013"}], "фильтр": { "OrderItems": [], "filterItems": []}}
Как вы можете видеть в Json String, у меня есть идентификатор со значением 1374044905885298000, но когда объект сериализован из строки, я получил 1.374044905885298011E18
И проблема в том, что это представление Long потерял последние нули 0000, и я получил Long 1374044905885297920
Почему? и как это исправить?
Данные в массиве - это String map, и все они уже имеют формат Long id Double.
Я пытаюсь зарегистрировать Adapater для Long или Double, но никогда не срабатывал.
Версия Gson 2.2.4
ОБНОВИТЬ
Это не дубликат вопроса
Как помешать Gson преобразовать длинное число (строку json) в формат научной нотации?