2

我正在构建一个 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;

使用 Gson 的toJson()方法时,我得到一个StackOverflowError. 根据我的阅读,这是因为 Gson 无法处理循环引用——也就是说,它无法toJson()在我的GoalArrayList<Goal>属性上执行。

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

有谁知道使用循环引用的方法,以便我可以通过 Gson 将信息存储在 JSON 中?

4

1 回答 1

0

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

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

于 2013-07-23T16:19:45.887 回答