我在ArrayList<CustomClass>
内有一个ParentClass
,我使用Gson.toJson()
将其写入文件。但是,当我尝试使用Gson.fromJson()
反序列化JSON时,我只获得ArrayList<CustomClass>
的1个元素。
例如,我将执行以下操作
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'
现在,即使我已经确认JSON文件中的ArrayList
确实存在两个元素,但只有1个元素使用fromJson
加载到对象中。
我正在对这些进行序列化很好,但我想要一次性地反映ArrayList<OtherCustomClass>
里面GrandParentClass
内部ParentClass
的内部ArrayLists
。
基本上我想序列化ArrayLists<?>
在这个对象层次结构中嵌套可能3或4层,并将它们反序列化为包含这些嵌套{{1}}的1个ParentClass。这将如何实现?
由于
答案 0 :(得分:2)
当您想要在涉及泛型时反序列化集合时,您需要做一些额外的工作。这解释为here。
但是,我不确定这是如何适用于您的情况,因为您将集合“嵌套”在顶级非泛型类中。
答案 1 :(得分:0)
public class ParentClass {
public static 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 {
public GrandParentClass() {
ParentClass.myList.add(new CustomClass("asdfasdf.."));
ParentClass.myList.add(new CustomClass("fdsafdsa..."));
}
public int arraySize() {
return ParentClass.myList.size();
}
}
当您再次声明并使用相同的数组时,可能会丢失数据。试试这个