使用GSON在JSON到Object期间拦截值

时间:2017-06-23 00:37:28

标签: android 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";
    }
}

我有一个来自JSON的字符串值myType。我想将此字符串值仅限制为某些值。在将myType设置为我的对象之前,有没有办法拦截它?

我知道我可以通过将type转换为枚举来实现此目的,但我希望完全避免使用枚举。或者,我也可以将检查逻辑放在getter中,但这不太有效。

杰克逊允许使用setter。 GSON中有类似的内容吗?

1 个答案:

答案 0 :(得分:3)

是的,您可以通过实施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());