反序列化为类扩展 LinkedHashMap 与 Gson



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

java.lang.IllegalStateException:预期BEGIN_OBJECT,但在第 1 行第 3 列路径 $ 处是字符串。

我需要使用的类型(我不拥有这个,所以没有选择使用其他任何东西):

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();
    }
}

定义 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());

最新更新