Gson Long perdeu dados quando analisou a String
Eu tenho representações string json de alguns objetos de classe de objeto é
public class SMPBBaseObjectsList {
public ArrayList<Object> data = new ArrayList<>();
public Integer count;
public Integer limitFrom;
public Integer limitTo;
public Boolean hasMore;
public String dataItemsClass;
}
E eu tenho json
{"classItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "data": [{"id": 1374046117510970000, " Nome ":" Test3 "," classItem ":" smpb.base.classes.SMPBUser "," dataSliceCode ":" 012013 "}]," filtro ": {" orderItems ": []," filterItems ": []} }
Eu tento analisar esse json e criar objeto da minha classe com o próximo código:
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);
Saídas do sistema:
ANTES:{"classItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "data": [{"id": 1374044905885298000, "Name": "Test3", "classItem": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013"}], "filtro": {"orderItems": [], "filterItems": [ ]}}
DEPOIS DE: {"classItem": "smpb.utility.classes.SMPBBaseObjectsList", "dataItemsClass": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013", "data": [{"Name": "Test3" ,"id": 1.374044905885298011E18, "classItem": "smpb.base.classes.SMPBUser", "dataSliceCode": "012013"}], "filtro": {"orderItems": [], "filterItems": []}}
Como você pode ver no Json String eu tenho ID com o valor 1374044905885298000, mas quando o objeto serializado da cadeia eu tenho 1.374044905885298011E18
E o problema é o que esta representação de Long perdeu últimos zeros 0000 e eu tenho longa 1374044905885297920
Por quê? e como consertar isso?
Data in Array é o mapa String e já é todo o formato Long id.
Eu tento registrarAdapater para Long ou Double, mas nunca acionado.
Versão do Gson 2.2.4
ATUALIZAR
Não é duplicado de pergunta