[英]GSON deserialize a list with two different types of objects in Android
我正在用gson保存列表,當我閱讀它時,遇到了問題。 問題是我要發送的列表具有兩種不同類型的對象。 一個是CourseHeader,另一個是CourseInfo。 這是我現在擁有的代碼:
Type type = new TypeToken<List>(){}.getType();
List OLDcoursesArrayList = gson.fromJson(courseDataString, type);
在這段代碼中: TypeToken <List>我可以做這樣的事情:
TypeToken<List<CourseHeader>>
但是由於列表中有兩個不同的對象,所以當我使用它們時,只有CourseHeader可以工作。 我想知道我是否可以做這樣的事情:
TypeToken<List<CourseHeader, CourseInfo>>
或者,如果我可以通過其他方式檢索列表,以在列表中獲得兩個不同的對象。
對可能遇到此問題的其他任何人(解析一個可能具有兩種不同數據類型的對象的列表),那么我得到了一些棘手的解決方案:
Gson gson = new Gson();
String courseDataString = courseData.getString("courseList", "");
JsonArray courseDataArray = new JsonParser().parse(courseDataString).getAsJsonArray();
List NEWcoursesArrayList = new ArrayList();
for(JsonElement json : array){
if(json.toString().contains("header")) {
NEWcoursesArrayList.add(gson.fromJson(json, CourseHeader.class));
}
else{
NEWcoursesArrayList.add(gson.fromJson(json, CourseInfo.class));
}
}
因此,我們要做的是像往常一樣獲取Json字符串並將其轉換為JsonArray。 因此,我們使用JsonParser解析字符串,然后調用“ getAsJsonArray”以獲取JsonArray。 該數組如下所示:
[{“ header”:“ item”,“ topSeperator”:0},{“ notheader”:“ item”,“ topSeperator”:0}]
之后,我創建沒有特定類型的List對象。
然后,我使用一個for循環,該循環使用JsonElement迭代器遍歷Json數組,並將每個元素轉換為字符串。 我使用字符串檢查是否包含例如“ header”之類的字詞,如果包含,則使用
List.add(gson.fromJson(json, OBJECTTYPE.class)
因此,您可以做的是,在對象內部可以有一個變量,用於指示它們是什么類型的對象。 像這樣的變量:
String objectType = "OBJECTTYPE";
然后,當您將Json數組內的每個元素轉換為字符串時,檢查字符串是否包含“ OBJECTTYPE”,如果包含,則像往常一樣使用.add(gson.fromJson(json迭代器,類型為object.class)。
這是一個駭人聽聞的解決方案,但是如果您具有兩個不同數據類型的列表,則可以使用它。 我確定有更好的解決方案。
我認為您必須創建一個CourseObject對象的列表,這兩個對象都是CourseHeader和CourseInfo類的超類。
在解析代碼中,您可以對接收到的對象進行自省,以查看將其保存到列表之前需要實例化的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.