Gson在包装器中反序列化模型

时间:2017-02-10 08:47:11

标签: java json gson

我在包装器类中有一组潜在的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);
}

1 个答案:

答案 0 :(得分:0)

尝试替换:

ItemCollectionModel items;

使用:

List<SingleItemModel> items;