Как обойти круговые ссылки при использовании 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?


person cshadowstar    schedule 22.07.2013    source источник


Ответы (1)


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

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

person PomPom    schedule 23.07.2013