Десериализовать массив объектов внутри другого объекта с помощью Gson

Используя Volley в моем проекте Android, я получаю ответ json, например:

{
    "value1": 1,
    "value2": aaa,
    "subvalues": [
    {
        "value1": 297,
        "value2": 310,
        "class3": {
            "name": "name1",
            "id": 1,
            "value": 32            
          }
    },
    ...
    ]
}

Мне нужно десериализовать его в pojo, используя Gson. Классы:

class1:

public class class1 {
    private int value1;
    private String value2;
    private List<class2> vals;

    public class class2 {
        private int value1;
        private int value2;
        private class3 c3;
   }
}

class3:

public class class3 {
    private String name;
    private int id;
    private int value;
}

После звонка

Gson g = new Gson();
class1 c1 = g.fromJson(jsonString, class1.class);

у меня есть только value1 а также value2 из class1 заполнены. Список остается null все время. Как я могу это исправить?

4 ответа

Решение

Менять private List<class2> vals; в private List<class2> subvalues

Вам нужно изменить:

private List<class2> vals;

чтобы:

private List<class2> subvalues;

Если вы хотите сохранить vals Исходное имя поля, вы можете использовать аннотацию SerializedName:

public class class1 {
    private int value1;
    private String value2;

    @SerializedName("subvalues")
    private List<class2> vals;

    ...
}

Здесь вы можете найти больше информации.

Как утверждают другие ответы, вы неправильно называете свои переменные, чтобы gson мог правильно десериализоваться. Обратите внимание, что у вас, по-видимому, также есть опечатка в возвращенном json во втором классе, ссылаясь на calss3 вместо класса3.

Это потому, что в JSON ваша ссылка на subvalues и в объекте Java ваше имя поля как vals, измените это на subvalues это сработает.

Другие вопросы по тегам