Десериализовать массив объектов внутри другого объекта с помощью 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
это сработает.