【问题标题】:Member field gets ignored when parsing using gson使用 gson 解析时忽略成员字段
【发布时间】:2012-04-27 00:39:30
【问题描述】:

我正在使用 Google 的 gson 库将 POJO 解析为 json。这些是涉及的对象:

// Order.java
public class Order {
    // ...
    private int id;
    private String name;
    private Location location;
    // ...
}
// Location.java
public class Location {
    // ...
    private String address;
    private float latitude;
    private float longitude;
    private String postcode
    // ...
}

当我使用 new Gson().toJson(order) 通过 gson(确保 Location 成员变量不为空)运行它时,我得到了以下结果:

{
    "id" : 1,
    "name" : "nameValue"
}

但我期待得到这样的东西:

{
    "id" : 1,
    "name" : "nameValue",
    "location" : {
            "address" : "some address",
            "latitude" : 53.346346,
            "longitude" : -3.346363,
            "postcode" : "23563"
        }
}

无法弄清楚为什么会发生这种情况。有人遇到过这个吗?我可能做错了什么?

我尝试设置自定义类型适配器,但没有成功。

感谢您的帮助。

【问题讨论】:

  • 您是否尝试关闭 gson 中的忽略 null 选项?尝试使用Gson gson = new GsonBuilder().serializeNulls().create(); 创建你的 gson 实例,看看你是否得到 "location" : null ?

标签: java android json gson pojo


【解决方案1】:

好的,我弄清楚了问题所在。我有一个模拟对象工厂,它使用 Location 类型中的匿名构造函数创建模拟对象,如下所示:

Location location = new Location() {
    {
         setAddress("some address");
         setLatitude(53.346346);
         setLongitude(-3.356363);
         setPostCode("23563");
    }
};

所以 Gson 将其解释为匿名类,正如文档中所说:

内部类、匿名类、本地类中外部类对应的字段被忽略,不包含在序列化或反序列化中

我将其更改为按预期设置GsonBuilder 和 iworks 的正常方式。但是我想知道是否可以使用这种启动,因为它确实适用于集合(ArrayList)。它使我的模拟工厂更易于阅读。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2015-10-14
    • 2017-01-23
    • 2015-11-14
    • 2011-05-11
    相关资源
    最近更新 更多