【问题标题】:Deserializing into class extending LinkedHashMap with Gson反序列化为使用 Gson 扩展 LinkedHashMap 的类
【发布时间】:2016-02-11 20:41:50
【问题描述】:

我正在尝试将 JSON 反序列化为使用 Gson 扩展 LinkedHashMap 的类。我可以直接在 LinkedHashMap 中简单地执行此操作,但是当我尝试使用 LinkedHashMap 的子类时,出现错误

java.lang.IllegalStateException:应为 BEGIN_OBJECT,但在第 1 行第 3 列路径 $ 处为 STRING。

我需要使用的类型(我没有这个,所以没有其他选择):

public class ValueMap extends LinkedHashMap<CharSequence, Object> {}

我必须定义一个 InstanceCreator 来解决 CharSequence 的问题。我试图反序列化的 JSON 作为一个基本示例是:

{"people":[{"name":"name1","surname":"name2","age":12,"dogs":["spot","fluffy","batman"],"cars":[{"name":"name1","model":1933},{"name":"name2","model":343}]},{"name":"name2","surname":"name2","age":44,"dogs":["spot","test","jack"]}]}

更新为包含序列化/反序列化代码:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(CharSequence.class, new CharSequenceInstanceCreator());

Gson gson = gsonBuilder.create();

String serialized = gson.toJson(value);

LinkedHashMap<CharSequence, Object> deserialized = gson.fromJson(serialized, ValueMap.class);

CharSequenceInstanceCreator 的样子:

public static class CharSequenceInstanceCreator implements InstanceCreator<CharSequence> {

    @Override
    public CharSequence createInstance(Type arg0) {
        return new String();
    }

}

【问题讨论】:

  • 你也可以发帖,你是如何反序列化的?
  • 我们需要更多信息来帮助您,发布您的类实现以及您如何反序列化 JSON 字符串
  • 更新为包含反序列化代码

标签: java gson linkedhashmap


【解决方案1】:

定义 JsonDeserializer 而不是 InstanceCreator。

public static class CharSequenceDeserializer implements JsonDeserializer<CharSequence> {

    @Override
    public CharSequence deserialize(JsonElement element, Type type,
            JsonDeserializationContext context) throws JsonParseException {
        return element.getAsString();
    }

}

并注册它。

//  gsonBuilder.registerTypeAdapter(CharSequence.class, new CharSequenceInstanceCreator());
gsonBuilder.registerTypeAdapter(CharSequence.class, new CharSequenceDeserializer());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2014-02-22
    相关资源
    最近更新 更多