Как обойти циклические ссылки при использовании Gson?


Я создаю приложение для 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() на моих Goal или ArrayList<Goal> свойствах.

Я понимаю, что могу каким-то образом использовать TypeToken, чтобы обойти эту проблему. (gson.toJson () бросает StackOverflowError ) Тем не менее, я прочитал руководство (http://google-gson.googlecode.com/svn/tags/1.1.1/docs/javadocs/com/google/gson/reflect/TypeToken.html) и я действительно не понимаю, как его можно использовать для этого.

Кто-нибудь знает способ обойти круговые ссылки, чтобы я мог хранить информацию в JSON через Gson?

1 2

1 ответ:

TypeToken не поможет, он не создан для этого. Если вы хотите обрабатывать циклические ссылки в Gson, вам понадобится TypeAdapterFactory, но это не просто.

Лучший подход, вероятно, состоит в том, чтобы разобрать ваш JSon с Джексоном (но я на самом деле никогда не использовал эту функциональность) : http://wiki.fasterxml.com/JacksonFeatureBiDirReferences