使用Gson反序列化另一个对象内的对象数组

时间:2015-04-26 13:03:07

标签: java android json gson json-deserialization

在我的Android项目中使用Volley,我得到一个json响应,如:

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

我需要使用Gson将其反序列化为pojo。课程是:

的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);

我只填充了value1value2 class1。列表始终为null。 我该如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

您需要更改:

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;

    ...
}

Here您可以找到更多信息。

答案 1 :(得分:4)

private List<class2> vals;更改为private List<class2> subvalues

答案 2 :(得分:0)

这是因为在JSON中您引用subvalues并在java对象中将您的字段名称称为vals。将其更改为subvalues它将起作用。

答案 3 :(得分:0)

正如其他答案所述,您没有正确命名变量,因为gson能够正确反序列化。请注意,您在返回的json中看起来也有一个拼写错误,在第二类中,指的是calss3而不是class3。

相关问题