因此,我得到了一个String,它是我在一个类上实现的toJson方法的结果,并且在我的测试代码中确认了它是我的类的正确Json表示。我的目标是将这个String转换为JsonObject,并使用Gson将它传递给一个构造函数。然而,我遇到了一个奇怪的问题。
这是我的暗号
Gson gson = new Gson();
JsonObject jObj = gson.fromJson(jsonString, JsonObject.class);
我以前在我的项目中的很多地方都用过这段完全相同的代码,用于其他类,它运行得很好。我甚至把其中一段函数代码复制到这个测试类中,并进行了尝试。然而,我尝试的每一个版本都得到了同样的结果--jObj是一组空括号。
我不明白这是怎么发生的。我已经确认jsonString有它应该需要的所有字段。为什么Gson返回一个空的JsonObject?没有抛出异常。
4条答案
按热度按时间klr1opcd1#
好的,我知道这是一个有点老,但我有同样的问题。解决办法是改变jar文件。我有一个类似的代码样本工作在另一个项目,但后来我遇到了完全相同的问题在另一个项目。嗯,问题是一个旧的gson-2.1.jar。更新了问题的应用程序到匹配的gson-2.3.1.jar和所有的工作。希望这有助于。
bejyjqdl2#
从您的注解中得知字符串是
{"varName":1, "otherVarName":2, "thirdVarName":3.4}
,看起来序列化的对象是Map
。您可能需要指定类型标记:其中
K
和V
是Map的键类型和值类型。如果不是Map
,请指定jsonString的获取来源类。jm2pwxwz3#
对于我的例子,我不小心在我的dagger模块中使用了下面的初始化器。
我删除了
setFieldNamingPolicy
,它的工作。aiazj4mn4#
我也有这个问题。
我用的是
我收到了一个只填充了默认值的对象。
我必须显式定义JsonObject类中每个属性的序列化名称,这与json响应中的命名方式不同。
例如,如果在json中,我解析的字段名是“total_score”,但是我的JsonObject有一个名为“totalProperty”的字段,我必须使用@SerialedName注解来定义关系。