1

我正在使用 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
    // ...
}

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

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

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

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

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

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

谢谢你的帮助。

4

1 回答 1

1

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

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

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

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

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

于 2012-04-27T06:21:06.413 回答