我使用 Gson 通过以下代码反序列化来自给定 API 的 JSON 字符串。
Gson gson = new Gson();
Map<String, CustomDto> test = gson.fromJson(result, new TypeToken<Map<String, CustomDto>>() {}.getType());
CustomDto
是一个由基元(int、long、boolean)和另一个对象构造的对象。我遇到的问题是这个对象是可选的。有时它会被传播,有时它只是不存在。我期待如果 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
中删除该字段,它就可以正常工作,但是如果它被传输就会出现问题。请问是否有一些注释来标记实体类中可选的字段,或者有人可以给我一些建议如何处理这个?
谢谢大家
最佳答案
尝试下面的 Gson 实例
Gson gson = new GsonBuilder().serializeNulls().create();
关于java - 如何使用 Gson 反序列化带有可选字段的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20747663/