我的metod中有json。我希望json更改为object bean。编译器警告并要求删除泛型。
此示例不起作用:
Gson gson = new Gson();
List<MyBean> myBean = gson.fromJson(
result.getBody(), List<myBean>.class);
所以运行,但我无法访问bean:
Gson gson = new Gson();
List<MyBean> myBean = gson.fromJson(
result.getBody(), List.class);
MyBean.get(0).getFirstName();
错误java.lang.ClassCastException:com.google.gson.internal.StringMap无法强制转换为com.home.bean.MyBean
如何解决这个问题?
答案 0 :(得分:2)
试试这个:
Type myBeanListType = new TypeToken<ArrayList<MyBean>>() {}.getType();
List<MyBean> mappedList = new Gson().fromJson(result.getBody(), myBeanListType );
答案 1 :(得分:1)
您的代码必须更改为:
List<MyBean> myBean = gson.fromJson(result.getBody(), new TypeToken<List<MyBean>>() {}.getType());
根据Gson用户指南here,(在 序列化和反序列化通用类型 部分下):
当你调用toJson(obj)时,Gson调用obj.getClass()来获取 有关要序列化的字段的信息。同样,你通常也可以 在fromJson(json,MyClass.class)方法中传递MyClass.class对象。 如果对象是非泛型类型,则此方法正常。但是,如果 对象是泛型类型,然后通用类型信息丢失 因为Java Type Erasure。
您可以通过指定正确的参数化来解决此问题 您的通用类型的类型。您可以使用TypeToken执行此操作 类。
因此,在处理泛型时,您必须使用TypeToken
。