code: @SuppressWarnings("unchecked")
    public <T> T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException {
      JsonReader jsonReader = newJsonReader(json);
      T object = (T) fromJson(jsonReader, typeOfT);
      assertFullConsumption(object, jsonReader);
      return object;
    }
docs: This method deserializes the Json read from the specified reader into an object of the
  specified type. This method is useful if the specified object is a generic type. For
  non-generic objects, use {@link #fromJson(Reader, Class)} instead. If you have the Json in a
  String form instead of a {@link Reader}, use {@link #fromJson(String, Type)} instead.
  
  @param <T> the type of the desired object
  @param json the reader producing Json from which the object is to be deserialized
  @param typeOfT The specific genericized type of src. You can obtain this type by using the
  {@link com.google.gson.reflect.TypeToken} class. For example, to get the type for
  {@code Collection<Foo>}, you should use:
  <pre>
  Type typeOfT = new TypeToken&lt;Collection&lt;Foo&gt;&gt;(){}.getType();
  </pre>
  @return an object of type T from the json. Returns {@code null} if {@code json} is at EOF.
  @throws JsonIOException if there was a problem reading from the Reader
  @throws JsonSyntaxException if json is not a valid representation for an object of type
  @since 1.2