我有一个接口(称为Content)和几个实现该接口的类(例如ContentVideo,ContentAd ...)。我收到一个包含这些对象列表的JSON对象。我开始在单独的类中手动反序列化那些对象,但是最近遇到了GSON,它将极大地简化此过程。但是我不确定如何实现这一点。

这是ContentVideoJSONParser

public ArrayList<ContentVideo> parseJSON(String jsonString) {
        ArrayList<ContentVideo> videos = new ArrayList<>();

        JSONArray jsonArr = null;
        Gson gson = new Gson();
        try {
            jsonArr = new JSONArray(jsonString);
            for(int i = 0; i < jsonArr.length(); i++) {
                JSONObject jsonObj = jsonArr.getJSONObject(i);
                ContentVideo cv = gson.fromJson(jsonObj.toString(), ContentVideo.class);
                videos.add(cv);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return videos;
    }


ContentAdJSONParser看起来完全一样,除了返回ContentAd对象的ArrayList以及用于检索对象的以下行:

ContentAd ca = gson.fromJson(jsonObj.toString(), ContentAd.class);


将这些类合并为一个类的最简单方法是什么?注意:一个JSON对象仅包含一个类,即ContentVideo或ContentAd。它们没有像其他SO问题中那样混杂在一起,因此需要TypeAdapter。

这似乎是一个简单的问题,但我无法弄清楚。谢谢你的帮助。

最佳答案

大概是这样吗?

public <T extends Content> ArrayList<T> parseJSON(String jsonString, Class<T> contentClass) {
    ArrayList<T> contents = new ArrayList<>();

    JSONArray jsonArr = null;
    Gson gson = new Gson();
    try {
        jsonArr = new JSONArray(jsonString);
        for(int i = 0; i < jsonArr.length(); i++) {
            JSONObject jsonObj = jsonArr.getJSONObject(i);
            T content = gson.fromJson(jsonObj.toString(), contentClass);
            contents.add(content);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    return contents;
}

09-06 23:59