code: @SuppressWarnings("unchecked")
    public <T> T fromJson(JsonElement json, Type typeOfT) throws JsonSyntaxException {
      if (json == null) {
        return null;
      }
      return (T) fromJson(new JsonTreeReader(json), typeOfT);
    }
docs: This method deserializes the Json read from the specified parse tree 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(JsonElement, Class)} instead.
  
  @param <T> the type of the desired object
  @param json the root of the parse tree of {@link JsonElement}s 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 {@code null}
  or if {@code json} is empty.
  @throws JsonSyntaxException if json is not a valid representation for an object of type typeOfT
  @since 1.3