【发布时间】:2015-02-13 09:42:07
【问题描述】:
我有一个调用 do rest api 的 android 应用程序。 它返回餐馆列表。每家餐厅都有类别列表。每个类别可以有多个菜肴。
当我反序列化这个列表时,我有一个不错的餐厅数组列表,每个餐厅也有一个类别数组列表,但是在类别类中,菜肴数组列表为空。
有人知道如何解决这个问题吗?
JSON 响应:(实际上是一个 ServiceResponse 类型的对象)
{
"requestToken" : 0,
"responseCode" : 2,
"objectType" : "com.test.Restaurant",
"error" : null,
"data" : [ {
"id" : 1,
"name" : "Name",
"addressCity" : "Warszawa",
"addressStreet" : "Kopernika",
"addressStreetNumber" : "4",
"addressApartmentNumber" : "17",
"categories" : [ {
"id" : 1,
"restaurantId" : 1,
"name" : "Breakfast",
"description" : "Description",
"dishes" : [ {
"id" : 11,
"categoryId" : 1,
"name" : "Dish 1",
"description" : "Descr",
"price" : 8.99,
"photoId" : 51
}, {
"id" : 21,
"categoryId" : 1,
"name" : "Dish 2",
"description" : "Descr",
"price" : 6.99,
"photoId" : 41
}, {
"id" : 31,
"categoryId" : 1,
"name" : "Dish 3",
"description" : "Descr",
"price" : 14.99,
"photoId" : 61
} ]
}, {
"id" : 2,
"restaurantId" : 1,
"name" : "Obiady",
"description" : "Opis kategorii",
"dishes" : [ {
"id" : 41,
"categoryId" : 2,
"name" : "Danie 4",
"description" : "Descr",
"price" : 6.99,
"photoId" : 0
}, {
"id" : 61,
"categoryId" : 2,
"name" : "Danie 5",
"description" : "Descr",
"price" : 8.0,
"photoId" : 0
}, {
"id" : 101,
"categoryId" : 2,
"name" : "Nowy obiad",
"description" : "",
"price" : 111.0,
"photoId" : 0
} ]
}, {
"id" : 3,
"restaurantId" : 1,
"name" : "Pasta",
"description" : "Opis kategorii",
"dishes" : [ ]
}, {
"id" : 4,
"restaurantId" : 1,
"name" : "Przystawki",
"description" : "Opis kategorii",
"dishes" : [ ]
}, {
"id" : 11,
"restaurantId" : 1,
"name" : "Some category",
"description" : "test",
"dishes" : [ ]
}, {
"id" : 51,
"restaurantId" : 1,
"name" : "Sushi",
"description" : "",
"dishes" : [ ]
} ]
}]
}
用 Jackson 解析结果:
ServiceResponse response = getServiceOutput(params, httpMethod);
if(response.getData() != null && response.getData().size() > 0) {
try {
// convert data array from object to class defined in objectType (in JSON)
ObjectMapper mapper = new ObjectMapper();
Class clazz = Class.forName( response.getObjectType() );
ArrayList list = (mapper.convertValue(response.getData(),
TypeFactory.defaultInstance().constructCollectionType(
ArrayList.class, clazz)));
broadcastIntent.putExtra("result", list);
broadcastIntent.putExtra("response_code", ServiceResponse.OK);
} catch (Exception e) {
broadcastIntent.putExtra("response_code", ServiceResponse.ERROR);
e.printStackTrace();
}
}
【问题讨论】:
-
您能否提供对象层次结构/您正在使用的类的代码(尤其是
Category.java) -
好吧。我认为这很简单。餐厅有 ArrayList
类别; Categories 有 ArrayList 菜品;你问的是这个吗? -
是的,希望变量、getter/setter 或注释中的简单错字导致问题,因为其他所有类都已正确解析