如何使用Gson反序列化具有可选字段的JSON

4

我正在使用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字符串中缺少某个字段,则不应调用相关的设置方法(就像在Jackson中一样),并且它应该可以正常工作,但不幸的是这不是情况,我遇到了异常:

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

如果我从CustomDto中删除该字段,它将正常工作,但这会导致传输问题。请问是否有一些注释可以在实体类中标记字段为可选的,或者是否有人能给我一些建议如何处理这个问题?
谢谢大家。

иҮ·еЏ‘еёѓж‚Ёе°қиҮ•еЏҚеғЏе€—еЊ–зљ„JSONд»ӨеЏЉе®һй™…зљ„CustomDtoз±»ж€–йЂ‚еҢ“зљ„з±»пәЊд»Ө帮助我们й‡ҚзҺ°ж‚Ёзљ„й”™иҮҮгЂ‚ - Sotirios Delimanolis
1个回答

13

尝试使用以下Gson实例

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接