【问题标题】:Deserialize array of objects inside another object using Gson使用 Gson 反序列化另一个对象内的对象数组
【发布时间】:2015-04-26 13:03:06
【问题描述】:

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

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

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

类1:

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;
   }
}

类3:

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

【问题讨论】:

    标签: java android json gson json-deserialization


    【解决方案1】:

    你需要改变:

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

    【讨论】:

      【解决方案2】:

      private List&lt;class2&gt; vals; 更改为private List&lt;class2&gt; subvalues

      【讨论】:

        【解决方案3】:

        这是因为在 JSON 中您引用为 subvalues 而在 java 对象中您的字段名称为 vals。将其更改为 subvalues 即可。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2021-12-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多