2014-02-06 30 views
1

在我的metod中有json。我想json更改爲對象bean。編譯器發出警告並要求刪除泛型。我無法從Json返回列表<bean>? Java.lang.ClassCastException

這個例子不起作用:

Gson gson = new Gson(); 
    List<MyBean> myBean = gson.fromJson(
      result.getBody(), List<myBean>.class); 

因此,沒有運行,但我不能去豆:

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

那麼categoryNameBean從哪裏來?它是如何申報的? – mikea

+0

對不起。我想寫MyBean – Demion

回答

2

試試這個:

Type myBeanListType = new TypeToken<ArrayList<MyBean>>() {}.getType(); 
    List<MyBean> mappedList = new Gson().fromJson(result.getBody(), myBeanListType); 
+0

感謝您的回答 – Demion

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類型擦除,通用類型信息丟失 。

您可以通過爲您的泛型類型指定正確的參數化的 類型來解決此問題。您可以通過使用TypeToken 類來完成此操作。

因此,在處理泛型時,您將不得不使用TypeToken

+0

感謝您的詳細解答 – Demion