2016-02-11 78 views
1

我想從JSON反序列化成一個擴展LinkedHashMap與Gson的類。我能夠直接平凡做到這一點到LinkedHashMap中,但是當我嘗試使用子類LinkedHashMap中,我得到的錯誤反序列化到擴展LinkedHashMap與Gson的類

java.lang.IllegalStateException:預期BEGIN_OBJECT但STRING在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(); 
    } 

} 
+0

你還可以發佈,你怎麼實際上反序列化它? –

+0

我們需要更多信息來幫助您,發佈您的類實現以及如何反序列化JSON字符串 – Marco

+0

已更新,以包含反序列化代碼 – praetorian1

回答

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