我在包装器类中有一组潜在的JSON响应模型,例如此Dashboard示例:
public class Dashboard {
@SerializedName("dashboard")
private List<Wrapper> wrappers;
public class Wrapper {
LocalDateTime updated;
SingleItemModel item;
ItemCollectionModel items;
//....
}
}
public class ItemCollectionModel {
List<SingleItemModel> items;
}
我尝试从多个API端点的聚合JSON填充这些字段。缩写形式与此类似:
{
"dashboard": [
{
"updated": "2017-02-08T05:42:52.451",
"items": {...}
},
"updated": "2017-02-08T05:42:52.451",
"item": {...}
},
....
]
}
我遇到了Gson无法创建POJO的问题。如果我的理解是正确的,则默认反序列化会尝试将字段名称与JSON元素键匹配。
"items" : {} to ItemCollectionModel items
我认为问题在于实例字段的命名方式与它们的Wrappers相似。
Wrapper.items vs ItemCollectionModel.items
当API响应是单个POJO时,Gson反序列化工作正常,它将封装JSON对象视为POJO,JSON的内部值与POJO字段匹配。但是在尝试使用Wrapper时我得到了空字段。
如何确保Wrapper的字段正确反序列化?
------------ UPDATE -------------
一个简单的解决方案就是盯着我。根据jakubbialkowski的答案,使用对象列表,允许Gson反序列化项目。诀窍是然后手动创建CollectionModel以在调用字段的getter时封装它。
public ItemCollectionModel getItemCollectionModel() {
return new ItemCollectionModel(items);
}
答案 0 :(得分:0)
尝试替换:
ItemCollectionModel items;
使用:
List<SingleItemModel> items;