如何序列化/反序列化(JSON)ArrayLIst wich has an ArrayLIst as field in Java

问题描述 投票:3回答:3

我是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(){...}

}

如果我的问题不明确,请询问更多细节。

对不起,如果我犯了错误。谢谢你的帮助。

java android json serialization arraylist
3个回答
2
投票

如果是收集,则必须指定类型。

See a Guide User

在你的情况下,我认为这将解决:

Type collectionType = new TypeToken<Collection<A>>(){}.getType();
Collection<A> list = gson.fromJson(json, collectionType);   

A是你的班级。


0
投票

你想使用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);
    }
}

0
投票

更好的是做这样的事情:

List<YourObject> myList = new Genson().deserialize(dta.toString(), List.class);
© www.soinside.com 2019 - 2024. All rights reserved.