2

Gson を使用してオブジェクト データを格納する Android アプリケーションを作成しています。私が使用しているタイプ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()、 myGoalまたはArrayList<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 を Jackson で解析することです (ただし、実際にはこの機能を使用したことはありません): http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

于 2013-07-23T16:19:45.887 に答える