如何序列化/反序列化(JSON)ArrayLIst wich has an ArrayLIst as field in Java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何序列化/反序列化(JSON)ArrayLIst wich has an ArrayLIst as field in Java相关的知识,希望对你有一定的参考价值。
我是android编程世界的新手,我在使用JSON序列化和反序列化自定义对象的ArrayList方面遇到了一些问题。我知道如何序列化对象,但不知道如果它有一个ArrayList作为字段。
我找到了GSON库,但我真的不知道如何使用它。
我有一个类A的ArrayList,它有一个类B的ArrayList。我正在使用toJSON()方法序列化类A:
public class A
{
//Some fields like title, id...
private String mTitle;
private ArrayList<B> mArray; //I don't know how to serialize/deserialize this field
public A(){...}
public A(JSONObject json){...}
public JSONObject toJSON() throws JSONException //method I use to convert my object into a JSONObject
{
JSONObject json = new JSONObject();
json.put("TITLE",mTitle);
return json;
}
}
public class B
{
//some fields like a double, String...
public B(){...}
}
如果我的问题不明确,请询问更多细节。
对不起,如果我犯了错误。谢谢你的帮助。
答案
如果是收集,则必须指定类型。
在你的情况下,我认为这将解决:
Type collectionType = new TypeToken<Collection<A>>(){}.getType();
Collection<A> list = gson.fromJson(json, collectionType);
A
是你的班级。
另一答案
你想使用Parcelable吗?尝试这样的事情(伪代码):
public class ParcelableObject implements Parcelable{
List<ObjectB> _customObjectList = new ArrayList<ObjectB>();
@Override
public void writeToParcel(Parcel outParcel_, int arg1) {
outParcel_.writeTypedList(_customObjectList); //where _customObjectList is your list variable
}
//Then in your constructor which takes in a Parcel:
public ParcelableObject(Parcel parcelIn_) {
parcelIn_.readTypedList(_customObjectList, ObjectB.CREATOR);
}
}
对象B
public class ObjectB implements Parcelable{
int _randomInt;
public static final Parcelable.Creator<ObjectB> CREATOR = new Parcelable.Creator<ObjectB>() {
@Override
public ObjectBcreateFromParcel(Parcel in) {
return new ObjectB(in);
}
@Override
public ObjectB[] newArray(int size) {
return new ObjectB[size];
}
};
public ObjectB(Parcel parcelIn_) {
_randomInt = parcelIn_.readInt();
}
@Override
public void writeToParcel(Parcel out_, int flags) {
out_.writeInt(_randomInt);
}
}
另一答案
更好的是做这样的事情:
List<YourObject> myList = new Genson().deserialize(dta.toString(), List.class);
以上是关于如何序列化/反序列化(JSON)ArrayLIst wich has an ArrayLIst as field in Java的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jackson 将 JSON 反序列化为 ArrayList<POJO>
JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例
无法将 java.util.ArrayList 的实例反序列化出 VALUE_STRING
使用 Jackson 将嵌套数组反序列化为 ArrayList