2012-04-27 64 views
1

我正在使用Google的gson库将POJO解析为json。这些都是涉及到的对象:使用gson解析时,会员字段被忽略

// 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(确保该位置的成员变量不为null)使用new Gson().toJson(order)我得到这个结果:

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

但我期望得到像这样:

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

不知道为什么会发生这种情况。有人遇到过吗?我可能做错了什么?

我已经尝试设置一个自定义类型适配器没有运气。

感谢您的帮助。

+1

你尝试关闭gson中的忽略null选项吗?尝试用'Gson gson = new GsonBuilder()创建你的gson实例。serializeNulls().create();'看看你是否得到“location”:null? – Yenchi 2012-04-27 01:05:12

回答

1

好的,我找出了问题所在。我创建的定位类型使用匿名构造的模仿对象,像这样的模拟对象的工厂:

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

所以GSON解释它作为一个匿名类,因为它是在文档中说:

对应于内部类,匿名类和局部类外的类

字段被忽略,并且不包含在序列化和反序列化

我改变成建立的正常方式和iworks如预期。但是我不知道是否可以使用这种启动,因为它对Collections(ArrayList)有效。它使我的模拟工厂更易于阅读。 :)