我需要反序列化具有数组的Json文件。我知道如何对其进行反序列化,以便获得List对象,但是在框架中,我使用的是未实现Java List接口(interface)的自定义列表对象。我的问题是,如何为自定义列表对象编写反序列化器?

编辑:我希望解串器是通用的,这意味着我希望它对每种列表都适用,例如CustomList<Integer>CustomList<String>CustomList<CustomModel>不仅是一种特定的列表,因为制作我使用的每种解串器都会很烦人。

最佳答案

这是我想出的:

class CustomListConverter implements JsonDeserializer<CustomList<?>> {
    public CustomList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) {
        Type valueType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];

        CustomList<Object> list = new CustomList<Object>();
        for (JsonElement item : json.getAsJsonArray()) {
            list.add(ctx.deserialize(item, valueType));
        }
        return list;
    }
}

像这样注册:
Gson gson = new GsonBuilder()
        .registerTypeAdapter(CustomList.class, new CustomListConverter())
        .create();

08-04 00:37