code: @Override
      public UsageData deserialize(JsonElement element, Type type, JsonDeserializationContext context)
          throws JsonParseException
      {
          JsonObject obj = element.getAsJsonObject();
          JsonElement usageData = obj.get("usage_data");
          if(usageData != null && usageData.isJsonObject())
              return gson.fromJson(usageData, UsageData.class);
          return gson.fromJson(element, UsageData.class);
      }
docs: Gson invokes this call-back method during deserialization when it encounters a field of the specified type.
  @param element The Json data being deserialized
  @param type The type of the Object to deserialize to
  @param context The JSON deserialization context
  @return The usage data