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

标签 java arrays json gson

我需要反序列化一个包含数组的 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();

关于java - 如何在 Gson 中制作自定义列表反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418160/

相关文章:

java - 从 Java 执行未标记化的命令行

java - 在 if 语句中分配变量值

arrays - scala 中令人难以置信的隐式数组转换

java - 传递和复制数组?

javascript - 通过几个分隔符将字符串拆分为数组

java - 如何使用Java远程登录Jenkins服务器?

java - 如何使用 java/selenium 更改 chrome 的默认下载位置

ios - 内容类型 JSON SIGABRT 错误

jquery - 将 CSV 转换为 JSON - jQuery

json - 使用 JSON 数据从 Azure 流分析查询 Power BI 输出