如何在Gson中创建自定义列表反序列化器?
问题描述:
我需要反序列化一个包含数组的Json文件。我知道如何反序列化它,以便获得一个List对象,但在框架中,我使用了一个不实现Java List接口的自定义列表对象。我的问题是,如何为我的自定义列表对象编写反序列化器?如何在Gson中创建自定义列表反序列化器?
编辑:我想解串器是通用的,这意味着我希望它为每一种名单的逾时工作,像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();
+0
对不起,延迟回复。你的回答确实是正确的。我非常感谢你,先生。 – BananyaDev
你为什么不先用Java类第一反序列化,然后写出自己的变压器将自定义列表对象? –
看看[这个](http://stackoverflow.com/questions/16590377/custom-json-deserializer-using-gson) –
@ReazMurshed我可以做到这一点,但我反序列化成一个对象模型,然后我在我的其他代码中使用。我可以创建一个ModelJson类和一个Model类,其中ModelJson类使用来自Java的List接口,并且仅用于反序列化,并将其转换为Model类。问题在于我有很多类可以这样做,所以这有点痛苦,而且我很好奇是否有更优雅的解决方案。如果没有,我会走硬编码路径,但我希望我不会。 – BananyaDev