使用 JSON 时,通常使用 Gson 将 JSON 数据转换为类型化对象。但是,您可能会遇到这样的情况:您需要解析的 ArrayList 项的类型是在运行时使用反射动态确定的。在这种情况下,传统的 TypeToken 方法可能会达不到要求。
例如,考虑以下代码:
Type typeOfObjectsList = new TypeToken<ArrayList<myClass>>() {}.getType(); List<myClass> objectsList = new Gson().fromJson(json, typeOfObjectsList);
此代码将 JSON 字符串转换为 myClass 对象列表。但是,如果 ArrayList 的项类型应该动态确定怎么办?
为了实现这一点,您可以利用 Gson 版本 2.8.0 中引入的新功能:TypeToken.getParameterized。此方法允许您创建具有指定参数化类型的 TypeToken。
使用方法如下:
private <T> Type setModelAndGetCorrespondingList2(Class<T> type) { Type typeOfObjectsListNew = TypeToken.getParameterized(ArrayList.class, type).getType(); return typeOfObjectsListNew; }
通过传递 ArrayList 类和动态项类型类类型作为参数对于 TypeToken.getParameterized,您可以创建一个 TypeToken,它表示具有所需项类型的 ArrayList。然后可以使用这个 TypeToken 作为 Gson.fromJson 的参数,以正确地将 JSON 数据解析为所需的列表类型。
以上是如何在运行时将 Gson TypeToken 与动态 ArrayList 项类型结合使用?的详细内容。更多信息请关注PHP中文网其他相关文章!