我使用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"
}
}
无法弄清楚为什么会这样。有人遇到过这个吗?我可能做错了什么?
我尝试过设置自定义类型适配器但没有运气。
感谢您的帮助。
答案 0 :(得分:1)
好的,我弄清楚问题是什么。我有一个模拟对象工厂,它使用Location类型中的匿名构造函数创建模拟对象,如下所示:
Location location = new Location() {
{
setAddress("some address");
setLatitude(53.346346);
setLongitude(-3.356363);
setPostCode("23563");
}
};
因此,Gson将其解释为匿名类,正如文档中所述:
内部类,匿名类和本地类中的外部类对应的字段将被忽略,不包括在序列化或反序列化中
我将其更改为按预期设置GsonBuilder
和iworks的常规方式。但是我想知道是否可以使用这种启动,因为它适用于Collections(ArrayList)。它使我的模拟工厂更容易阅读。 :)