Gsonデシリアライザ、汎用化?

久々に Google gson のデシリアライザを書いていて思いました。。
文字列のリスト、

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
/**
 * List<String> の JsonDeserializer
 */
public class ListStringDeserialiser implements JsonDeserializer<List<String>>{
   @Override
   public List<String> deserialize(JsonElement json, Type typeOfT,
                                   JsonDeserializationContext context) throws JsonParseException{
      List<String> list = new ArrayList<>();
      if (json.isJsonArray()){
         JsonArray jary = json.getAsJsonArray();
         for(Iterator<JsonElement> it=jary.iterator(); it.hasNext();){
            list.add(it.next().getAsString());
         }
      }
      return list;
   }
}

この ListStringDeserialiser registerTypeAdapter で登録すれば、

import com.google.gson.reflect.TypeToken;;

Gson gson = new GsonBuilder().serializeNulls()
.registerTypeAdapter(new TypeToken<List<String>>(){}.getType(), new ListGenericDeserialiser<List<String>>()
.create();

JSON に、

{ "names" : [ "a", "b", "c" ] }

とあれば、fromJson を変換先のクラスに、List<String> names が存在すれば、
シリアライズでのリストのセットがされます。
しかし、このようにプリミティブ型(String, Integer 等)である場合、
このようなJsonDeserializer の実装を registerTypeAdapter 登録することは不要です。


ListIntegerDeserialiser
ListDoubleDeserialiser
ListLocalDateDeserialiser
ListLocalDateTimeDeserialiser
なんて用意しても、役に立つかもしれません。