Gson deserializa la matriz JSON con múltiples tipos de objetos

Tengo algunos JSON extraños como:

[
  {
    "type":"0",
    "value":"my string"
  },
  {
    "type":"1",
    "value":42
  },
  {
    "type":"2",
    "value": {
    }
  }
]

Basado en algún campo, el objeto en la matriz es de cierto tipo. Al usar Gson, mi idea es tener un TypeAdapterFactory que envíe adaptadores delegados para esos tipos determinados a un TypeAdapter, pero estoy obsesionado con comprender una buena forma de leer ese campo de "tipo" para saber qué tipo crear. En el TypeAdapter,

Object read(JsonReader in) throws IOException {
  String type = in.nextString();
  switch (type) {
    // delegate to creating certain types.
  }
}

supondría que el campo "tipo" viene primero en mi JSON. ¿Hay alguna forma decente de eliminar esa suposición?

Respuestas a la pregunta(1)

Su respuesta a la pregunta