如何在Gson中制作自定义列表反序列化器?

Ban*_*Dev 8 java arrays json gson

我需要反序列化具有数组的Json文件.我知道如何反序列化它以便我得到一个List对象,但在框架中我使用的是一个不实现Java List接口的自定义列表对象.我的问题是,如何为自定义列表对象编写反序列化器?

编辑:我想解串器是通用的,这意味着我希望它为每一种名单OT的工作,如CustomList<Integer>,CustomList<String>,CustomList<CustomModel>不只是一个特定类型的列表,因为这将是烦人,使解串器为每一种我使用.

Ego*_*uba 5

这就是我想出的:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样注册:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(CustomList.class, new CustomListConverter())
        .create();
Run Code Online (Sandbox Code Playgroud)