2017-06-23 99 views
0

我具有以下設置:截距值到對象使用GSON

public static class MyPojoImpl { 
    @SerializedName("myNumber") 
    private int myNumber; 
    @SerializedName("myType") 
    private String myType; 

    @Override 
    public List<String> getMyNumber() { 
     return myNumber; 
    } 

    @Override 
    public @Type String getMyType() { 
     return myType; 
    } 

    @StringDef({Type.ONE, 
      Type.TWO, 
      Type.THREE}) 
    @Retention(RetentionPolicy.SOURCE) 
    @interface Type { 
     String ONE = "ONE"; 
     String TWO = "TWO"; 
     String THREE = "THREE"; 
    } 
} 

我有一個字符串值myType即來自JSON。我想限制此字符串值僅限於某些值。在設置爲我的對象之前有什麼方法可以攔截myType

我知道我可以通過轉換爲type來實現枚舉,但我想避免使用枚舉。另外,我也可以把檢查邏輯放在getter中,但這不是太高效。

傑克遜允許使用setter。 GSON有類似的東西嗎?

回答

2

是的,你可以通過實現JsonDeserializer

Ref here for Complete Example

private class DateTimeDeserializer implements JsonDeserializer<MyPojoImpl> { 
    public MyPojoImpl deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
     throws JsonParseException { 
     MyPojoImpl pojoImpl = new MyPojoImpl(); 
     // Do the Processing here 
     return pojoImpl 
    } 
} 

GsonBuilder gson = new GsonBuilder(); 
gson.registerTypeAdapter(MyPojoImpl.class, new DateTimeDeserializer()); 
+0

這正是定製deserialise過程中我一直在尋找,謝謝! – dkarmazi