如何创建一个Gson deserilization,以一种方式处理所有String,除了一个字段?

时间:2016-10-05 12:16:58

标签: java gson

我创建了一个反序列化,只要它看到字符串“nil”,它就会返回null。

private static Gson createCustomGson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(String.class, new JsonDeserializer<String>() {
        @Override
        public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
            return (json.getAsString().equals("nil")) ? null : json.getAsString();
        }
    });
    return gsonBuilder.create();
}

它工作正常除了,我想添加一个异常,对于存储List的字段“Keyword”,我不想消除nil返回null,但保留String。如何为“关键字”添加例外?

我的关键字类属于以下类型

public class KeywordListing implements Serializable {
    List<String> keys;
}

1 个答案:

答案 0 :(得分:0)

找到解决方案。这是通过添加另一个TypeAdapter来使用Gson的默认去分类,如下所示。

private static Gson createCustomGson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(String.class, new JsonDeserializer<String>() {
        @Override
        public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
            return (json.getAsString().equals("nil")) ? null : json.getAsString();
        }
    });
    gsonBuilder.registerTypeAdapter(KeywordListing.class, new JsonDeserializer< KeywordListing >() {
                @Override
                public KeywordListing deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
                    return new Gson().fromJson(json, KeywordListing.class);
                }
            });

    return gsonBuilder.create();
}

如果答案比我上面的答案更短,请告诉我。