Java GSON在Android中反序列化包含两种不同类型对象的列表
我正在用gson保存我的列表,当我阅读它时,我遇到了问题。问题是我发送的列表有两种不同类型的对象。一个是CourseHeader,另一个是CourseInfo。以下是我现在掌握的代码:Java GSON在Android中反序列化包含两种不同类型对象的列表,java,android,json,gson,Java,Android,Json,Gson,我正在用gson保存我的列表,当我阅读它时,我遇到了问题。问题是我发送的列表有两种不同类型的对象。一个是CourseHeader,另一个是CourseInfo。以下是我现在掌握的代码: Type type = new TypeToken<List>(){}.getType(); List OLDcoursesArrayList = gson.fromJson(courseDataString, type); Type Type=new-TypeToken(){}.g
Type type = new TypeToken<List>(){}.getType();
List OLDcoursesArrayList = gson.fromJson(courseDataString, type);
Type Type=new-TypeToken(){}.getType();
列出OLDcoursesArrayList=gson.fromJson(courseDataString,类型);
在这篇文章中:TypeTokenTypeToken<List<CourseHeader>>
TypeToken<List<CourseHeader, CourseInfo>>
TypeToken
但是由于列表中有两个不同的对象,所以当我使用它们时,只有CourseHeader对象才起作用。我想知道我是否可以这样做:
TypeToken<List<CourseHeader>>
TypeToken<List<CourseHeader, CourseInfo>>
TypeToken
或者,如果我可以通过其他方式检索列表,以获取列表中的两个不同对象。我认为您必须创建一个CourseObject对象列表,这两个对象都是CourseHeader和CourseInfo类的超类
在解析代码中,您可以对接收到的对象使用内省,以查看在将其保存到列表中之前需要将其实例化为哪些对象。我认为您必须创建CourseObject对象的列表,这两个对象都是CourseHeader和CourseInfo类的超类
在解析代码中,您可以对接收到的对象使用内省,以查看在将其保存到列表中之前需要将其实例化为哪些对象。我认为您必须创建CourseObject对象的列表,这两个对象都是CourseHeader和CourseInfo类的超类
在解析代码中,您可以对接收到的对象使用内省,以查看在将其保存到列表中之前需要将其实例化为哪些对象。我认为您必须创建CourseObject对象的列表,这两个对象都是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。此阵列将如下所示:
TypeToken<List<CourseHeader>>
TypeToken<List<CourseHeader, CourseInfo>>
[{“header”:“item”,“topSeperator”:0},{“notheader”:“item”,“topSeperator”:0}]
之后,我创建了没有特定类型的列表对象
然后我使用for循环,它使用JsonElement迭代器在Json数组中循环,并将每个元素转换为字符串。我使用字符串检查它是否包含,例如“header”,如果包含,则使用
List.add(gson.fromJson(json, OBJECTTYPE.class)
所以你可以做的是,你可以在你的对象里面有一个变量,它指示它们是什么类型的对象。一个变量,如:
String objectType = "OBJECTTYPE";
然后,当您将Json数组中的每个元素转换为字符串时,检查字符串是否包含“OBJECTTYPE”,如果包含,则使用.add(gson.fromJson(Json迭代器,object.class的类型)像往常一样添加对象
这是一个黑客解决方案,但如果您有一个包含两种不同数据类型的列表,它就会起作用。我相信有更好的解决方案。对于可能遇到此问题的任何其他人(解析可能包含两种不同数据类型对象的列表),我得到了一个黑客解决方案:
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。该数组如下所示:
TypeToken<List<CourseHeader>>
TypeToken<List<CourseHeader, CourseInfo>>
[{“header”:“item”,“topSeperator”:0},{“notheader”:“item”,“topSeperator”:0}]
之后,我创建了没有特定类型的列表对象
然后我使用for循环,该循环使用JsonElement迭代器在Json数组中循环,并将每个元素转换为字符串
List.add(gson.fromJson(json, OBJECTTYPE.class)
所以你可以做的是,你可以在你的对象里面有一个变量,它指示它们是什么类型的对象
String objectType = "OBJECTTYPE";
然后,当您将Json数组中的每个元素转换为字符串时,检查字符串是否包含“OBJECTTYPE”,如果包含,则使用.add(gson.fromJson(Json迭代器,object.class的类型)像往常一样添加对象
这是一个黑客解决方案,但如果您有一个包含两种不同数据类型的列表,它就会起作用。我相信有更好的解决方案。对于可能遇到此问题的任何其他人(解析可能包含两种不同数据类型对象的列表),我得到了一个黑客解决方案:
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。该数组如下所示:
TypeToken<List<CourseHeader>>
TypeToken<List<CourseHeader, CourseInfo>>
[{“header”:“item”,“topSeperator”:0},{“notheader”:“item”,“topSeperator”:0}]
之后,我创建了没有特定类型的列表对象
然后我使用for循环,该循环使用JsonElement迭代器在Json数组中循环,并将每个元素转换为字符串
List.add(gson.fromJson(json, OBJECTTYPE.class)
所以你可以做的是,你可以在你的对象里面有一个变量,它指示它们是什么类型的对象
String objectType = "OBJECTTYPE";
然后,当您将Json数组中的每个元素转换为字符串时,检查字符串是否包含“OBJECTTYPE”,如果包含,则使用.add(gson.fromJson(Json迭代器,object.class的类型)像往常一样添加对象
这是一个骇人的解决方案,但如果您有一个包含两种不同数据类型的列表,它就可以工作