я получил набор потенциальных моделей реагирования JSON внутри класса-оболочки, такие как этот Dashboard пример:модель Gson десериализации внутри обертки
public class Dashboard {
@SerializedName("dashboard")
private List<Wrapper> wrappers;
public class Wrapper {
LocalDateTime updated;
SingleItemModel item;
ItemCollectionModel items;
//....
}
}
public class ItemCollectionModel {
List<SingleItemModel> items;
}
Я пытаюсь заполнить эти поля из агрегированного JSON нескольких конечных точек API. Сокращенная форма выглядит примерно так:
{
"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
десериализация Gson отлично работает, когда ответ API является единственным POJO, он рассматривает герметизирующий объект JSON как POJO и внутренние значения JSON совпадает с полями POJO. Но при попытке использовать Wrapper я получаю нулевые поля.
Как я могу убедиться, что поля Wrapper правильно десериализованы?
------------ UPDATE -------------
Простое решение смотрел мне в лицо. Использование списка объектов, на ответ jakubbialkowski, позволяет Gson десериализовать элементы. Хитрость заключалась в том, чтобы тогда вручную создать CollectionModel, чтобы инкапсулировать его, когда вызывается геттер для поля.
public ItemCollectionModel getItemCollectionModel() {
return new ItemCollectionModel(items);
}
Вы можете создавать POJO, онлайн, чтобы передать ваши JSON. –
Вы могли бы предоставить больше объяснений этому? – fakataha
Чтобы создать правильную структуру pojo для gson из json, передайте свой ответ json на http://www.jsonschema2pojo.org/ этих ссылках и выберите тип источника: и стиль аннотации: с правой стороны. –