2014-05-14 101 views
8

在使用Gson的fromJson方法時,有沒有任何方法給定類的設置方法?當Gson反序列化JSON時可以使用setter嗎?

我想這樣做是因爲對目標類的每個String全局變量都進行了修剪。

是否有任何GSON API註釋?

我知道,GSON提供了編寫自定義序列化器/反序列化器的功能,但我想知道是否有另一種方法來實現這一點。

回答

1

我實施了JsonDeserializer<String>並在GsonBuilder上註冊。因此,對於收到的所有字符串字段,Gson將使用我的StringGsonTypeAdapter來反序列化該值。

下面是我的代碼:

import static net.hugonardo.java.commons.text.StringUtils.normalizeSpace; 
import static net.hugonardo.java.commons.text.StringUtils.trimToNull; 

final class StringGsonTypeAdapter implements JsonDeserializer<String> { 

    private static final StringGsonTypeAdapter INSTANCE = new StringGsonTypeAdapter(); 

    static StringGsonTypeAdapter instance() { 
     return INSTANCE; 
    } 

    @Override 
    public String deserialize(JsonElement jsonElement, Type type, 
     JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { 
     return normalizeSpace(trimToNull(jsonElement.getAsString())); 
    } 
} 

...和我GsonBuilder:

Gson gson = new GsonBuilder() 
    .registerTypeAdapter(String.class, StringGsonTypeAdapter.instance()) 
    .create()) 
13

沒有,沒有。 Gson主要通過反思實例字段來工作。所以如果你不打算轉移到傑克遜有這個功能,我認爲你不能有一個通用的方式來打電話給你的制定者。所以這裏沒有註釋。

實現自己的特殊需要,你可以:

  1. 編寫自己的定製TypeAdapter
  2. 創建具有您打算修剪和創建自定義字符串構造InstanceCreator
  3. 解析您的JSON爲JsonObject,對字符串進行一些處理,然後使用該對象作爲解析int的源你的班級。

只要您發佈一些代碼或提供有關您的數據/ JSON的信息,我可以爲您提供更多提示。