2013-07-22 3 views
2

Я создаю приложение для Android, в котором я использую Gson для хранения данных Object. У меня есть тип Goal, который я использую, которая обладает следующими свойствами:Как обойти круговые ссылки при использовании Gson?

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; 

При использовании метода toJson() Gson, я получить StackOverflowError. Из того, что я прочитал, это потому, что Gson не может обрабатывать круговые ссылки, то есть он не может выполнить toJson() на моих Goal или ArrayList<Goal> свойствах.

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

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

ответ

0

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

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

Смежные вопросы