使用gson解析时会忽略成员字段

时间:2012-04-27 00:39:31

标签: java android json gson pojo

我使用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成员变量不为null)时,我得到了这样的结果:

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

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

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

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

我尝试过设置自定义类型适配器但没有运气。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

因此,Gson将其解释为匿名类,正如文档中所述:

  

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

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