gpt4 book ai didi

java - 反序列化为使用 Gson 扩展 LinkedHashMap 的类

转载 作者:行者123 更新时间:2023-11-30 07:36:20 25 4
gpt4 key购买 nike

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

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $.

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

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

关于java - 反序列化为使用 Gson 扩展 LinkedHashMap 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com