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

Java 使用Gson时如何绕过循环引用?,java,android,gson,circular-reference,stack-overflow,Java,Android,Gson,Circular Reference,Stack Overflow,我正在构建一个Android应用程序,其中我使用Gson存储对象数据。 我有一个类型Goal,我正在使用它,它具有以下属性: private long id; private String goalName; private boolean isMainGoal; private Goal upperLevelGoal; private Goal mainGoal; private ArrayList<Goal> subGoals; private int goalLevel; pr

我正在构建一个Android应用程序,其中我使用Gson存储对象数据。 我有一个类型
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;
私有长id;
私有字符串目标名称;
私有布尔目标;
私人目标;
私人目标;
私有ArrayList子目标;
私人内部目标层;
私有字符串textViewSubGoalLine;
私人ArrayList站点Swithingoal;
当使用Gson的
toJson()
方法时,我得到一个
StackOverflowError
。据我所知,这是因为Gson不能处理循环引用——也就是说,它不能对我的
Goal
ArrayList
属性执行
toJson()

我知道我可以用TypeToken来解决这个问题。()然而,我已经阅读了手册(),我真的不明白如何使用它来做到这一点


有人知道一种使用循环引用的方法,这样我就可以通过Gson将信息存储在JSON中吗?

TypeToken
不会有帮助,它不是为此而设计的。如果您想在Gson中处理循环引用,您需要一个
TypeAdapterFactory
,但它并不简单

更好的方法可能是使用Jackson解析JSon(但我实际上从未使用过此功能):