У меня есть ArrayList<CustomClass>
внутри ParentClass
, который я записал в файл, используя Gson.toJson()
.Однако, когда я пытаюсь десериализовать JSON, используя Gson.fromJson()
, я получаю только 1 элемент из ArrayList<CustomClass>
.
Например, я сделаю следующее
public class ParentClass {
private ArrayList<CustomClass> myList = new ArrayList<CustomClass>();
private GrandParentClass nested;
public ParentClass() {
myList.add(new CustomClass("adsf"));
myList.add(new CustomClass("fdsa"));
nested = new GrandParentClass();
}
public int arraySize() {
return myList.size();
}
}
public class GrandParentClass {
private ArrayList<OtherCustomClass> myList = new ArrayList<OtherCustomClass>();
public GrandParentClass() {
myList.add(new CustomClass("asdfasdf.."));
myList.add(new CustomClass("fdsafdsa..."));
}
public int arraySize() {
return myList.size();
}
}
Тогда, когда яДля создания нового экземпляра ParentClass я использую следующее для записи его в файл.
ParentClass pc = new ParentClass();
Gson gson = new Gson();
String writeThis = gson.toJson(pc); // Produces a perfect JSON reflection myList
FileOutputStream fos = new FileOutputStream(new File("writeto.json"));
fos.write(writeThis);
fos.close();
Объект JSON записывается в виде простого текста в файл .json
FileInputStream fis = new FileInputStream(new File("writeto.json"));
char c;
StringBuffer sb = new StringBuffer();
while ((c = fis.read()) != -1)
sb.append((char) c);
//Now this is where I only get 1 element of the ArrayList
Gson gson = new Gson();
ParentClass pc = gson.fromJson(sb.toString(), ParentClass.class);
Log.i("SIZE", "Size is " + pc.arraySize()); // Log output: 'Size is 1'
Сейчас, хотя я проверил, что в ArrayList
в файле JSON действительно есть два элемента, в объект загружается только 1, используя fromJson
.
Я просто сериализую их, но я быкак десериализовать ArrayList<OtherCustomClass>
внутри GrandParentClass
, который находится внутри ParentClass
, одним махом.
По сути, я хочу сериализовать ArrayLists
вложенных, возможно, на 3 или 4 слоя вниз в этой иерархии объектов, и десериализовать их в 1 ParentClass, который содержит эти вложенные ArrayLists<?>
.Как это будет сделано?
Спасибо