使用Gson时如何绕过循环引用?

时间:2013-07-22 02:14:10

标签: java android gson circular-reference stack-overflow

我正在构建一个Android应用程序,我正在使用Gson来存储Object数据。 我有一个类型Goal我正在使用它具有以下属性:

private long id;
private String goalName;
private boolean isMainGoal;
private Goal upperLevelGoal;
private Goal mainGoal;
private ArrayList<Goal> subGoals;
private int goalLevel;
private String textViewSubGoalLine;
private ArrayList<UrlComplex> sitesWithinGoal;

使用Gson的toJson()方法时,我得到StackOverflowError。据我所知,这是因为Gson无法处理循环引用 - 也就是说,它无法在toJson()Goal属性上执行ArrayList<Goal>

我知道我可以以某种方式使用TypeToken来解决这个问题。 (gson.toJson() throws StackOverflowError)但是,我已经阅读了手册(http://google-gson.googlecode.com/svn/tags/1.1.1/docs/javadocs/com/google/gson/reflect/TypeToken.html),我真的不明白如何使用它。

有没有人知道如何使用循环引用,以便我可以通过Gson将信息存储在JSON中?

1 个答案:

答案 0 :(得分:0)

TypeToken无济于事,不是为此而做的。如果你想在Gson中处理循环引用,你需要一个TypeAdapterFactory,但这并不简单。

更好的方法可能是用杰克逊解析你的JSon(但我实际上从未使用过这个功能): http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

相关问题