Gson, TypeToken, получение массива объектов из JSON, значения полей не заданы

Я пытаюсь получить массив объектов из строки JSON, используя Gson и его класс TypeToken.

Вот код, который я использовал:

List<MyItem> items = gson.fromJson(jsonString, new TypeToken<ArrayList<MyItem>>() {
 }.getType());

Список объектов создан, в нем есть ожидаемое количество объектов MyItem, но все значения их полей не установлены (они равны null, 0, false, значения по умолчанию).

Почему значения этих полей не установлены? Я что-то упускаю?

Сама строка JSON верна, и я получаю эти объекты другим способом (используя более подробный код и другую библиотеку). Я просто пытаюсь написать компактный код.


person user3791111    schedule 11.08.2015    source источник


Ответы (1)


Вы, наверное, ошиблись, перепутав разные предметы. Если типы ваших объектов не совпадают, сеттеры не вызываются.

public class MyObjectA implements Serializable
{
    private MyObjectB myObjectB;
    // with getter and setter
}

public class MyObjectB implements Serializable
{
    private int id;
    // with getter and setter
}

Если вы вернете List<MyObjectA>, возврат будет следующим:

[{
    "myObjectB": {
        "id": 6034
    }
}]

массив Json для ArrayList gson, как и вы сделал :

Type collectionType = new TypeToken<ArrayList<MyObjectA>>() {}.getType();
ArrayList<MyObjectA> navigation = gson.fromJson(jsonResponse, collectionType);
for (MyObjectA myObjectA : navigation) {
    System.out.println(myObjectA.getMyObjectB().getId());
}

Класс объектов путаницы, не предупреждает и не дает сбоев, но не устанавливает объекты коллекции должным образом.

person immobiluser    schedule 16.03.2016
comment
Я давно не работал над этим проектом, поэтому сейчас я не могу проверить его на реальном коде. В любом случае, большое спасибо за ваш ответ. - person user3791111; 29.03.2016