¿Cómo puedo evitar que gson convierta enteros en dobles?

Tengo enteros en mi json, y no quiero que gson los convierta en dobles. Lo siguiente no funciona:

@Test
public void keepsIntsAsIs(){
    String json="[{\"id\":1,\"quantity\":2,\"name\":\"apple\"},{\"id\":3,\"quantity\":4,\"name\":\"orange\"}]";
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(Double.class,  new DoubleSerializerAsInt());
    Gson gson = gsonBuilder.create();
    List<Map<String, Object>> l = gson.fromJson(json, List.class);
    for(Map<String, Object> item : l){
        System.out.println(item);
    }
}

private static class DoubleSerializerAsInt implements JsonSerializer<Double>{

    @Override
    public JsonElement serialize(Double aDouble, Type type, JsonSerializationContext jsonSerializationContext) {
        int value = (int)Math.round(aDouble);
        return new JsonPrimitive(value);
    }
}

La salida no es lo que quiero:

{id=1.0, quantity=2.0, name=apple}
{id=3.0, quantity=4.0, name=orange}

¿Hay alguna manera de tener números enteros en lugar de dobles en mi mapa?

{id=1, quantity=2, name=apple}
{id=3, quantity=4, name=orange}

Editar: No todos mis campos son enteros. He modificado mi ejemplo en consecuencia. He leído bastantes ejemplos en línea, incluidas algunas respuestas en este sitio, pero no funciona en este caso particular.

Respuestas a la pregunta(5)

Su respuesta a la pregunta