我的课程非常简单:
MyObject:
- String index;
- MyObject parent;
- List<MyObject> childs;
我想将存储的信息打印到json中。我使用Gson库的json函数。但由于每个孩子都有一个父对象的链接,我面对无限循环递归。有没有办法定义gson只打印每个子节点的父索引而不是转储完整信息?
答案 0 :(得分:4)
您需要使用@Expose注释。
Cursor webLinksCursor = ctx.getContentResolver().query(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, Browser.BookmarkColumns.DATE + " DESC");
int row_count = webLinksCursor.getCount();
int title_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE);
int url_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.URL);
if ((title_column_index > -1) && (url_column_index > -1) && (row_count > 0))
{
webLinksCursor.moveToFirst();
while (webLinksCursor.isAfterLast() == false)
{
if (webLinksCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX) != 1)
{
if (!webLinksCursor.isNull(url_column_index))
{
return webLinksCursor.getString(url_column_index);
}
}
webLinksCursor.moveToNext();
}
}
webLinksCursor.close();
return null;
然后使用
生成jsonpublic class MyObject{
@Expose
String index;
MyObject parent;
@Expose
List<MyObject> children;
}
编辑: 将它转换回对象时,可以执行dfs解析。只需制作一个方法:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
jsonString = gson.toJson(data);
并将其称为根对象。
答案 1 :(得分:1)
我今天遇到了同样的问题,并找到了另一个我想分享的解决方案:
您可以将属性声明为transient
,但不会将其序列化或反序列化:
public class MyObject{
String index;
transient MyObject parent;
List<MyObject> children;
}
Gson gson = new Gson();
gson.toJson(obj); // parent will not show up