2013-12-23 18 views
3

我正在使用Gson從給定的API使用以下代碼反序列化JSON字符串。如何使用Gson反序列化具有可選字段的json

Gson gson = new Gson(); 
Map<String, CustomDto> test = gson.fromJson(result, new TypeToken<Map<String, CustomDto>>() {}.getType()); 

CustomDto的是從原語(INT,長,布爾值)和另一對象構造的對象。我碰到的問題是這個對象是可選的。有時候會傳播,有時它不會。如果一個字段的JSON字符串相關的設置方法不應該叫(如在Jackson)的失蹤我所期待的,它應該只是工作不幸的是,情況並非如此,我碰到一個例外:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 207 column 23 

如果我從CustomDto中刪除該字段,它可以正常工作,但是如果它將被傳輸則會出現問題。請問有沒有在實體類中標記字段的註釋,或者有人可以給我一些建議如何處理?

謝謝大家。

+0

請發表您試圖反序列化JSON的和實際的'CustomDto'類或適當的類,這將有助於我們重現你的錯誤。 –

回答

12

嘗試以下GSON例如

Gson gson = new GsonBuilder().serializeNulls().create(); 
+0

感謝這工作! – Tom