我的json如下:
我的gson自定义反序列化器如下所示:
预期结果:
我想从json中获取类别的Arraylist。
以下是代码:
{
"status": 200,
"data": [
{
"catId": 638,
"catName": "Helena Bonham Carter",
"catUniqueName": "helena-bonham-carter",
"catSlug": ""
},
{
...
}
]
}
以下是我的类别模型:
public class Category {
private double catId;
private String catName;
private String catUniqueName;
private String catSlug;
}
我的gson自定义反序列化器如下所示:
Type listType = new TypeToken<ArrayList<Category>>(){}.getType();
Gson gson = new GsonBuilder()
.registerTypeAdapter(listType, new CategoryDeserializer())
.create();
private class CategoryDeserializer implements JsonDeserializer {
@Override
public Category deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
Gson gson = new Gson();
return gson.fromJson(((JsonObject) json).get("data"), typeOfT);
}
}
我正在使用Retrofit库,它使用gson来序列化/反序列化JSON对象。我将此自定义gson反序列化器传递给retrofit,但它会给我返回一个错误。您能告诉我在反序列化时哪里出错了吗?
错误:
java.util.ArrayList cannot be cast to com.compzets.app.models.Category
预期结果:
我想从json中获取类别的Arraylist。
public int status
和public ArrayList<Category> data
的超类不是更容易吗?请查看此问题的被接受答案中的示例。 - Tommideserialize
的返回类型从Category
改为ArrayList<Category>
就可以解决问题。感谢您指出这一点。这意味着我们可以采用这种方法,而不必创建包装对象。 - Ram Patra