当我尝试将JsonArray转换为List时,我得到一个long类型转换错误,代码如下
public static <T> ArrayList toArrayList(JsonArray jsonArray) {
System.out.println("---=Receive====>>"+jsonArray);
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.setLongSerializationPolicy(LongSerializationPolicy.STRING).create();
return gson.fromJson(jsonArray.toString(),
new TypeToken<List<T>>() {}.getType());
}
实验结果:
--=Receive====>>[{"serialNo":"1339497989051277312","createBy":"xxxx","createDate":1608196182000,"updateBy":"xxxx","updateDate":1615444156000}]
-=result--->>[{serialNo=1339497989051277312, createBy=xxxx, createDate=1.608196182E12, updateBy=xxxx, updateDate=1.615444156E12}]
我做错了什么?
1条答案
按热度按时间vecaoik11#
您的程式码有多个问题:
List
,而不是类ArrayList
。T
的类型参数没有绑定到它返回的列表,因此没有什么意义(如果有)。java.lang.Object
,Gson试图选择它认为最好的一个。Gson
示例。当我要求你提供list元素类时,我试图暗示你的实际代码是这样的:
无法工作。请注意以下事项:
com.google.gson.internal.LinkedTreeMap
--从Gson的Angular 来看,这是一种泛型类型,我在上面谈到过(arrayList.get(0).getClass()
)。java.lang.Double
,因为这种类型可以满足大多数实际需求(BigDecimal
是一个更好的选择,但它也会消耗内存;这也是忽略setLongSerializationPolicy
提示的原因)。Gson已经尽了最大的努力,它做到了。
你要做的,总结一下,就是:
第一个
传递类型标记为Gson提供了 * 足够 * 的信息来处理类型。原因如下: