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

Deserialize array of objects inside another object using Gson

在我的 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。 我该如何解决这个问题?

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

这是因为在 JSON 中你引用的是 subvalues 而在 java 中反对你的字段名称是 vals。将其更改为 subvalues 它会起作用。

正如其他答案所述,您没有正确命名变量以使 gson 能够正确反序列化。请注意,您返回的 json 和 class 两个中似乎都有错字,指的是 calss3 而不是 class3.

您需要更改:

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您可以找到更多信息。