Gson解析Json数组遇到的泛型类型擦除问题

今天,我本来想对Gson做一个小小封装的,但却遇到了 Gson解析Json数组遇到的泛型类型擦除问题,下面对此做下记录。

错误的方式

// 将Json数组解析成相应的映射对象列表
public static  ArrayList parseJsonArray(Class myClass,String jsonStr)throws Exception{
   return new Gson().fromJson(jsonStr,new TypeToken>(){}.getType());
}

这样写,运行会报错 数据类型不匹配,Gson 返回的数据类型是 List ,不是我们想要的 List

解决方法

网上找到了两篇文章:
Gson TypeToken with dynamic ArrayList item type
Java泛型-类型擦除

解决结果

Gson gson = new Gson();
//解析 Json对象
public static  T parseJson(Class type,String jsonStr)throws Exception{
   return gson.fromJson(jsonStr,type);
}
// 将Json数组解析成相应的映射对象列表
public static  ArrayList parseJsonArray(Class myClass,String jsonStr)throws Exception{
   Type type = new ListParameterizedType(myClass);
   return gson.fromJson(jsonStr, type);
}

private static class ListParameterizedType implements ParameterizedType {
   private Type type;
   private ListParameterizedType(Type type) {
      this.type = type;
   }
   @Override
   public Type[] getActualTypeArguments() {
      return new Type[] {type};
   }
   @Override
   public Type getRawType() {
      return ArrayList.class;
   }
   @Override
   public Type getOwnerType() {
      return null;
   }
   // implement equals method too! (as per javadoc)
}

你可能感兴趣的:(Gson解析Json数组遇到的泛型类型擦除问题)