使用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);
我只填了 value1
和 value2
,共 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您可以找到更多信息。
在我的 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);
我只填了 value1
和 value2
,共 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您可以找到更多信息。