2011-11-17 35 views
4

我的班級是這樣的:GSON定製反序列化邏輯

class Foo { 
    public String duration; 
    public String height; 
} 

我的JSON數據看起來像

{"duration":"12200000", "height":"162"} 

現在我想通過反序列化

Foo foo = gson.fromJson(jsonStr, Foo.class); 

因此, foo.duration是「20分鐘」(分鐘數), foo.height是「162cm」

這可能使用Gson嗎?

謝謝!

+0

「反序列化」下的含義是什麼? –

+0

我的意思是,Foo foo = gson.fromJson(...) – smilingcoder

回答

6

GSON允許創建自定義的解串器/串行器。嘗試閱讀here

對不起,沒有一個例子。

class FooDeserializer implements JsonDeserializer<Foo>{ 
    @Override 
    public Foo deserialize(JsonElement json, Type typeOfT, 
    JsonDeserializationContext context) throws JsonParseException { 

    JsonObject jo = (JsonObject)json; 
    String a = jo.get("duration").getAsString()+" mins"; 
    String b = jo.get("height").getAsString() + " cm"; 

//Should be an appropriate constructor 
    return new Foo(a,b); 
    }    
} 

則:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, foo.new FooDeserializer()).create(); 

,並根據需要將其使用fromJson(...)得到你應該得到的結果。

+0

是的,在該文檔中,自定義反序列化程序def基於數據類型,在上面的示例中,兩個字段類型均爲String,但我需要基於不同的反序列化邏輯在字段名稱上。 – smilingcoder

+0

檢查編輯的答案。 – 87element

+0

太棒了!這應該工作。謝謝! – smilingcoder