【问题标题】:Google Gson issue with deserializingGoogle Gson 反序列化问题
【发布时间】:2019-02-03 06:48:12
【问题描述】:

我有一个 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) 在 com.google.gson.Gson.fromJson(Gson.java:887) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801) 在 com.google.gson.Gson.fromJson(Gson.java:773)

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

【问题讨论】:

  • 发布你要反序列化的json

标签: java android json gson deserialization


【解决方案1】:

Expected a string but was BEGIN_OBJECT

您的 json 字符串中的field4 不是字符串类型,请使用 Json 到 POJO 生成器来创建适当的对象。

我喜欢用http://www.jsonschema2pojo.org/

【讨论】:

    【解决方案2】:

    事实证明问题在于混淆。

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

    {"a":3436213,"b":"一些字符串","c":{................},"d":true}

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多