Хорошо для кого-то, кто может столкнуться с этой проблемой (разбор списка, который может иметь два различных типа данных объектов), то я немного Hacky решение:
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. Этот массив будет выглядеть следующим образом:
[{ "заголовок": "пункт", "topSeperator": 0}, { "notheader": "пункт", "topSeperator": 0}]
После этого Я создаю свой объект List без определенного типа.
Затем я использую цикл for, который проходит через массив Json с использованием итератора JsonElement и преобразует каждый элемент в строку. Я использую строку, чтобы проверить, если он содержит сказать, например, «заголовок», если он потом добавить товар в мой список, используя
List.add(gson.fromJson(json, OBJECTTYPE.class)
Так что вы можете сделать, это, вы можете иметь переменную внутри вашей объекты, которые указывают, какой тип объекта они являются. Переменная, как:
String objectType = "OBJECTTYPE";
Тогда при преобразовании каждого элемента внутри массива Json в строку, проверьте, чтобы увидеть, если строка содержит «OBJECTTYPE», если это произойдет, то добавить объект, как обычно, с помощью .add (gson.fromJson (json iterator, тип object.class)
Это хакерское решение, но оно работает, если у вас есть список с двумя разными типами данных. Я уверен, что есть лучшее решение.
Я думал об этом, но не хочу, чтобы мои объекты Курса наследовали от чего-либо, и если бы я был в другой ситуации (какой я буду), где они наследуются от разных суперклассов, тогда я woul d застрять снова.Использование интерфейса также не помогает, поскольку, по-видимому, делает список типом интерфейса, а затем пытается использовать элементы внутри него для объектов курса, которые его реализуют, дает мне нарушения памяти. – SigmaO