Gson:使用其他对象列表序列化对象

时间:2016-04-09 16:28:47

标签: java json serialization android gson

我有GamePresenter类,其中包含玩家集合:

public class GamePresenter extends MvpBasePresenter<IMainGameView> {

public ArrayList<BoxPlayer> BoxPlayersColl;

public GamePresenter()
{
    TestPlayerInit testPlayerInit=new  TestPlayerInit();
    BoxPlayersColl=testPlayerInit.BoxPlayersColl;


}
@Override
public String toString() {
    return "GamePresenter [data1=" + BoxPlayersColl + "]";
}

}

TestPlayerInit简单创建所有玩家,插入BoxPlayerCollection。

因此,每个BoxPlayer都有一些字段和另一个对象的Map:

public class BoxPlayer {

public Player PlayerObj;

public Integer Id;
public String Description;
// getters,setters...

public Map<Integer,PlayerData> IntToPlayerData;

}

Player上课:

 public  int Id;
 public String NickName;
 // getters setters

public Player(int id,String nickName)
{
    Id=id;
    NickName=nickName;
}

而PlayerData很简单POJO:

public class PlayerData{
public BoxPlayer Player1;   
public BoxPlayer Player2;

public VotedBoxPlayer(BoxPlayer player1, BoxPlayer player2)
{
    Player1=player1;
    Player2=player2;
}

}

所以,我想序列化它并存储在SharedPrederence中。

我使用Gson lib:

 public String serializeGamePresenter(GamePresenter gamePresenter)
{
    Gson gson=new Gson();
    String gamePresenterJSON= gson.toJson(_gamePresenter);
    return gamePresenterJSON;
}

但是,当我使用这个方法 - 应用程序冻结,内存分配崩溃应用程序。

你能帮助我,如何将这个对象序列化为JSON?

P.S。当我尝试序列化ArrayList BoxPlayerColl时,它可以工作。

1 个答案:

答案 0 :(得分:1)

您没有显示所有信息,例如什么是TestPlayerInit? 无论如何,您已经创建了一个问题:

班级BoxPlayerPlayerData

中引用了public Map<Integer,PlayerData> IntToPlayerData;

玩家数据包含BoxPlayer

类型的变量

总结一下,当json序列化发生时,你将进入一个循环引用循环,一个无限循环,导致JVM崩溃。

您需要评估对象的结构。不应该存在A类引用B再次引用A的情况。