[英]Deserializing into class extending LinkedHashMap with Gson
我正在嘗試從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();
}
}
定義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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.