Google Gson 反序列化问题

瓦伦丁·尤里耶夫

我有一个 Java 类:

public class Object1 {
    private int field1;
    private String field2;
    private Object2 object2;
    private boolean field3;
}

我使用 Gson 将一些 Object1 实例保存为 JSON 字符串:

    String jsonString = new Gson().toJson(object1, Object1.class);

然后我向 Object1 类添加了新的 String 字段:

public class Object1 {
    private int field1;
    private String field2;
    private String field4;
    private Object2 object2;
    private boolean field3;
}

现在我无法使用方法将 json 字符串反序列化为 Object1 实例:

Object1 obj1 = new Gson().fromJson(jsonString, Object1.class);

因为 Gson 抛出异常:

System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 需要一个字符串,但在第 1 行第 444 列路径 $ .c 处为 BEGIN_OBJECT,位于 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read ( ReflectiveTypeAdapterFactory.java:224) at com.google.gson.Gson.fromJson (Gson.java:887) at com.google.gson.Gson.fromJson (Gson.java:852) at com.google.gson.Gson.fromJson (Gson.java:801) 在 com.google.gson.Gson.fromJson (Gson.java:773)

但为什么?我有没有一个字段的 JSON 字符串,这不会成为问题。为什么我不能反序列化它?

瓦伦丁·尤里耶夫

事实证明,问题在于混淆。

如果您不使用 @SerializedName 注释结果 JSON 可以是这样的:

{"a":3436213,"b":"some string","c":{................................},"d":true}

我们没有使用它,因为它不是 DTO。在这种情况下,我们使用 JSON 只是为了存储一些不重要的内部数据。但这对我来说是非常有趣的一课。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章