我需要反序列化具有数组的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();