2012-04-27 65 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)有效。它使我的模擬工廠更易於閱讀。 :)