如何使用Gson使用可选字段反序列化json

时间:2013-12-23 16:46:41

标签: java json gson

我正在使用Gson使用以下代码从给定API反序列化JSON字符串。

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

CustomDto是一个由基元(int,long,boolean)和另一个Object构造的对象。我遇到的问题是这个Object是可选的。有时它会被传播,有时它不存在。我期待如果JSON字符串中缺少一个字段,不应该调用相关的set方法(就像在Jackson中那样),它应该只是工作不幸,并非如此,我遇到了异常:

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

如果我从CustomDto删除该字段,它只是工作正常但是如果它将被传输则存在问题。请问是否有一些注释标记实体类中的可选字段,或者有人可以给我一些建议如何处理它?<​​/ p>

谢谢大家。

1 个答案:

答案 0 :(得分:13)

尝试以下Gson实例

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