GSON:反序列化通用对象

时间:2012-02-09 15:57:36

标签: java json gson

我试图使用GSON库从维基百科中反序列化一些JSON。通常,我会在Java中使用JSON创建每个对象,例如:

{
    query: {
        pages: {
            page: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

这将允许我使用以下Java代码进行反序列化:

class PageIdResponseGson
{
    private QueryResults query;

    public static class QueryResults
    {
        private PageResults pages;

        public PageResults getPages() {
            return pages;
        }
    }

    public static class PageResults
    {
        private PageResult page;

        public PageResult getPage() {
            return page;
        }
    }

    public static class PageResult
    {
        private int pageid;
        private int ns;
        private String title;

        public int getNs() {
            return ns;
        }

        public int getPageid() {
            return pageid;
        }

        public String getTitle() {
            return title;
        }
    }

    public QueryResults getQuery() {
        return query;
    }
}

然而,维基百科JSON使用page-id作为对象名称,这意味着我不能采用这种方法。

{
    query: {
        pages: {
            168079: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

有没有办法可以使用某种通用包装来处理这些动态对象名称?

1 个答案:

答案 0 :(得分:1)

你有几种选择:

  1. 你使用Hashmaps - >任何东西都可以成为hashmap中的一个关键字,而GSON会做得很好。
  2. 您实现自己的TypeAdapter和TypeAdapterFactory来处理此类情况,当您遇到目标类中不存在的数字字段时,您知道您拥有pageId并且应该在PageResults.page成员上重新映射