我正在使用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>
谢谢大家。
答案 0 :(得分:13)
尝试以下Gson实例
Gson gson = new GsonBuilder().serializeNulls().create();