content: /*
   * 支付宝开放平台API
   * 支付宝开放平台v3协议文档
   *
   * The version of the OpenAPI document: 2025-08-26
   * 
   *
   * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
   * https://openapi-generator.tech
   * Do not edit the class manually.
   */
  
  
  package com.alipay.v3.model;
  
  import java.util.Objects;
  import java.util.Arrays;
  import com.alipay.v3.model.MiniAppAuditReason;
  import com.alipay.v3.model.MiniAppCategoryInfo;
  import com.alipay.v3.model.MiniPackageInfo;
  import com.alipay.v3.model.RegionInfo;
  import com.google.gson.TypeAdapter;
  import com.google.gson.annotations.JsonAdapter;
  import com.google.gson.annotations.SerializedName;
  import com.google.gson.stream.JsonReader;
  import com.google.gson.stream.JsonWriter;
  import io.swagger.annotations.ApiModel;
  import io.swagger.annotations.ApiModelProperty;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  import com.google.gson.JsonArray;
  import com.google.gson.JsonDeserializationContext;
  import com.google.gson.JsonDeserializer;
  import com.google.gson.JsonElement;
  import com.google.gson.JsonObject;
  import com.google.gson.JsonParseException;
  import com.google.gson.TypeAdapterFactory;
  import com.google.gson.reflect.TypeToken;
  
  import java.lang.reflect.Type;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  
  import com.alipay.v3.JSON;
  
  /**
   * AlipayOpenMiniVersionDetailQueryResponseModel
   */
  @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
  public class AlipayOpenMiniVersionDetailQueryResponseModel {
    public static final String SERIALIZED_NAME_APP_DESC = "app_desc";
    @SerializedName(SERIALIZED_NAME_APP_DESC)
    private String appDesc;
  
    public static final String SERIALIZED_NAME_APP_ENGLISH_NAME = "app_english_name";
    @SerializedName(SERIALIZED_NAME_APP_ENGLISH_NAME)
    private String appEnglishName;
  
    public static final String SERIALIZED_NAME_APP_LOGO = "app_logo";
    @SerializedName(SERIALIZED_NAME_APP_LOGO)
    private String appLogo;
  
    public static final String SERIALIZED_NAME_APP_NAME = "app_name";
    @SerializedName(SERIALIZED_NAME_APP_NAME)
    private String appName;
  
    public static final String SERIALIZED_NAME_APP_SLOGAN = "app_slogan";
    @SerializedName(SERIALIZED_NAME_APP_SLOGAN)
    private String appSlogan;
  
    public static final String SERIALIZED_NAME_APP_VERSION = "app_version";
    @SerializedName(SERIALIZED_NAME_APP_VERSION)
    private String appVersion;
  
    public static final String SERIALIZED_NAME_BASE_AUDIT = "base_audit";
    @SerializedName(SERIALIZED_NAME_BASE_AUDIT)
    private String baseAudit;
  
    public static final String SERIALIZED_NAME_BASE_AUDIT_RECORD = "base_audit_record";
    @SerializedName(SERIALIZED_NAME_BASE_AUDIT_RECORD)
    private MiniAppAuditReason baseAuditRecord;
  
    public static final String SERIALIZED_NAME_CAN_RELEASE = "can_release";
    @SerializedName(SERIALIZED_NAME_CAN_RELEASE)
    private String canRelease;
  
    public static final String SERIALIZED_NAME_GMT_APPLY_AUDIT = "gmt_apply_audit";
    @SerializedName(SERIALIZED_NAME_GMT_APPLY_AUDIT)
    private String gmtApplyAudit;
  
    public static final String SERIALIZED_NAME_GMT_AUDIT_END = "gmt_audit_end";
    @SerializedName(SERIALIZED_NAME_GMT_AUDIT_END)
    private String gmtAuditEnd;
  
    public static final String SERIALIZED_NAME_GMT_CREATE = "gmt_create";
    @SerializedName(SERIALIZED_NAME_GMT_CREATE)
    private String gmtCreate;
  
    public static final String SERIALIZED_NAME_GMT_OFFLINE = "gmt_offline";
    @SerializedName(SERIALIZED_NAME_GMT_OFFLINE)
    private String gmtOffline;
  
    public static final String SERIALIZED_NAME_GMT_ONLINE = "gmt_online";
    @SerializedName(SERIALIZED_NAME_GMT_ONLINE)
    private String gmtOnline;
  
    public static final String SERIALIZED_NAME_GRAY_STRATEGY = "gray_strategy";
    @SerializedName(SERIALIZED_NAME_GRAY_STRATEGY)
    private String grayStrategy;
  
    public static final String SERIALIZED_NAME_MEMO = "memo";
    @SerializedName(SERIALIZED_NAME_MEMO)
    private String memo;
  
    public static final String SERIALIZED_NAME_MINI_APP_CATEGORY_INFO_LIST = "mini_app_category_info_list";
    @SerializedName(SERIALIZED_NAME_MINI_APP_CATEGORY_INFO_LIST)
    private List<MiniAppCategoryInfo> miniAppCategoryInfoList = null;
  
    public static final String SERIALIZED_NAME_MINI_CATEGORY_INFO_LIST = "mini_category_info_list";
    @SerializedName(SERIALIZED_NAME_MINI_CATEGORY_INFO_LIST)
    private List<MiniAppCategoryInfo> miniCategoryInfoList = null;
  
    public static final String SERIALIZED_NAME_PACKAGE_INFO_LIST = "package_info_list";
    @SerializedName(SERIALIZED_NAME_PACKAGE_INFO_LIST)
    private List<MiniPackageInfo> packageInfoList = null;
  
    public static final String SERIALIZED_NAME_PROMOTE_AUDIT = "promote_audit";
    @SerializedName(SERIALIZED_NAME_PROMOTE_AUDIT)
    private String promoteAudit;
  
    public static final String SERIALIZED_NAME_PROMOTE_AUDIT_RECORD = "promote_audit_record";
    @SerializedName(SERIALIZED_NAME_PROMOTE_AUDIT_RECORD)
    private MiniAppAuditReason promoteAuditRecord;
  
    public static final String SERIALIZED_NAME_REJECT_REASON = "reject_reason";
    @SerializedName(SERIALIZED_NAME_REJECT_REASON)
    private String rejectReason;
  
    public static final String SERIALIZED_NAME_SCAN_RESULT = "scan_result";
    @SerializedName(SERIALIZED_NAME_SCAN_RESULT)
    private String scanResult;
  
    public static final String SERIALIZED_NAME_SCREEN_SHOT_LIST = "screen_shot_list";
    @SerializedName(SERIALIZED_NAME_SCREEN_SHOT_LIST)
    private List<String> screenShotList = null;
  
    public static final String SERIALIZED_NAME_SERVICE_EMAIL = "service_email";
    @SerializedName(SERIALIZED_NAME_SERVICE_EMAIL)
    private String serviceEmail;
  
    public static final String SERIALIZED_NAME_SERVICE_PHONE = "service_phone";
    @SerializedName(SERIALIZED_NAME_SERVICE_PHONE)
    private String servicePhone;
  
    public static final String SERIALIZED_NAME_SERVICE_REGION_INFO = "service_region_info";
    @SerializedName(SERIALIZED_NAME_SERVICE_REGION_INFO)
    private List<RegionInfo> serviceRegionInfo = null;
  
    public static final String SERIALIZED_NAME_SERVICE_REGION_TYPE = "service_region_type";
    @SerializedName(SERIALIZED_NAME_SERVICE_REGION_TYPE)
    private String serviceRegionType;
  
    public static final String SERIALIZED_NAME_STATUS = "status";
    @SerializedName(SERIALIZED_NAME_STATUS)
    private String status;
  
    public static final String SERIALIZED_NAME_VERSION_DESC = "version_desc";
    @SerializedName(SERIALIZED_NAME_VERSION_DESC)
    private String versionDesc;
  
    public AlipayOpenMiniVersionDetailQueryResponseModel() { 
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appDesc(String appDesc) {
      
      this.appDesc = appDesc;
      return this;
    }
  
     /**
     * 小程序应用描述
     * @return appDesc
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "小程序demo的相关示例", value = "小程序应用描述")
  
    public String getAppDesc() {
      return appDesc;
    }
  
  
    public void setAppDesc(String appDesc) {
      this.appDesc = appDesc;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appEnglishName(String appEnglishName) {
      
      this.appEnglishName = appEnglishName;
      return this;
    }
  
     /**
     * 小程序应用英文名称
     * @return appEnglishName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "demoexample", value = "小程序应用英文名称")
  
    public String getAppEnglishName() {
      return appEnglishName;
    }
  
  
    public void setAppEnglishName(String appEnglishName) {
      this.appEnglishName = appEnglishName;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appLogo(String appLogo) {
      
      this.appLogo = appLogo;
      return this;
    }
  
     /**
     * 小程序应用logo图标
     * @return appLogo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "http://image.aaaa.alipay.com", value = "小程序应用logo图标")
  
    public String getAppLogo() {
      return appLogo;
    }
  
  
    public void setAppLogo(String appLogo) {
      this.appLogo = appLogo;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appName(String appName) {
      
      this.appName = appName;
      return this;
    }
  
     /**
     * 小程序应用名称
     * @return appName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "小程序demo", value = "小程序应用名称")
  
    public String getAppName() {
      return appName;
    }
  
  
    public void setAppName(String appName) {
      this.appName = appName;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appSlogan(String appSlogan) {
      
      this.appSlogan = appSlogan;
      return this;
    }
  
     /**
     * 小程序应用简介，一句话描述小程序功能
     * @return appSlogan
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "小程序demo简介", value = "小程序应用简介，一句话描述小程序功能")
  
    public String getAppSlogan() {
      return appSlogan;
    }
  
  
    public void setAppSlogan(String appSlogan) {
      this.appSlogan = appSlogan;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel appVersion(String appVersion) {
      
      this.appVersion = appVersion;
      return this;
    }
  
     /**
     * 小程序版本号
     * @return appVersion
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "0.0.1", value = "小程序版本号")
  
    public String getAppVersion() {
      return appVersion;
    }
  
  
    public void setAppVersion(String appVersion) {
      this.appVersion = appVersion;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel baseAudit(String baseAudit) {
      
      this.baseAudit = baseAudit;
      return this;
    }
  
     /**
     * 准入审核结果 （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）
     * @return baseAudit
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PASS", value = "准入审核结果 （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）")
  
    public String getBaseAudit() {
      return baseAudit;
    }
  
  
    public void setBaseAudit(String baseAudit) {
      this.baseAudit = baseAudit;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel baseAuditRecord(MiniAppAuditReason baseAuditRecord) {
      
      this.baseAuditRecord = baseAuditRecord;
      return this;
    }
  
     /**
     * Get baseAuditRecord
     * @return baseAuditRecord
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public MiniAppAuditReason getBaseAuditRecord() {
      return baseAuditRecord;
    }
  
  
    public void setBaseAuditRecord(MiniAppAuditReason baseAuditRecord) {
      this.baseAuditRecord = baseAuditRecord;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel canRelease(String canRelease) {
      
      this.canRelease = canRelease;
      return this;
    }
  
     /**
     * 是否可上架 true：可上架 false：不可上架 （version_status 为PROMOTE_AUDIT_REJECT有值） （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）
     * @return canRelease
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "true", value = "是否可上架 true：可上架 false：不可上架 （version_status 为PROMOTE_AUDIT_REJECT有值） （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）")
  
    public String getCanRelease() {
      return canRelease;
    }
  
  
    public void setCanRelease(String canRelease) {
      this.canRelease = canRelease;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel gmtApplyAudit(String gmtApplyAudit) {
      
      this.gmtApplyAudit = gmtApplyAudit;
      return this;
    }
  
     /**
     * 小程序版本提交审核的时间，格式为yyyy-MM-dd HH:mm:ss
     * @return gmtApplyAudit
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2017-12-12 12:00:00", value = "小程序版本提交审核的时间，格式为yyyy-MM-dd HH:mm:ss")
  
    public String getGmtApplyAudit() {
      return gmtApplyAudit;
    }
  
  
    public void setGmtApplyAudit(String gmtApplyAudit) {
      this.gmtApplyAudit = gmtApplyAudit;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel gmtAuditEnd(String gmtAuditEnd) {
      
      this.gmtAuditEnd = gmtAuditEnd;
      return this;
    }
  
     /**
     * 小程序版本审核结束时间，格式为yyyy-MM-dd HH:mm:ss
     * @return gmtAuditEnd
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2017-12-12 12:00:00", value = "小程序版本审核结束时间，格式为yyyy-MM-dd HH:mm:ss")
  
    public String getGmtAuditEnd() {
      return gmtAuditEnd;
    }
  
  
    public void setGmtAuditEnd(String gmtAuditEnd) {
      this.gmtAuditEnd = gmtAuditEnd;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel gmtCreate(String gmtCreate) {
      
      this.gmtCreate = gmtCreate;
      return this;
    }
  
     /**
     * 小程序版本创建时间
     * @return gmtCreate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2017-12-12 12:00:00", value = "小程序版本创建时间")
  
    public String getGmtCreate() {
      return gmtCreate;
    }
  
  
    public void setGmtCreate(String gmtCreate) {
      this.gmtCreate = gmtCreate;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel gmtOffline(String gmtOffline) {
      
      this.gmtOffline = gmtOffline;
      return this;
    }
  
     /**
     * 小程序版本下架时间
     * @return gmtOffline
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2017-12-12 12:00:00", value = "小程序版本下架时间")
  
    public String getGmtOffline() {
      return gmtOffline;
    }
  
  
    public void setGmtOffline(String gmtOffline) {
      this.gmtOffline = gmtOffline;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel gmtOnline(String gmtOnline) {
      
      this.gmtOnline = gmtOnline;
      return this;
    }
  
     /**
     * 小程序版本上架时间
     * @return gmtOnline
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2017-12-12 12:00:00", value = "小程序版本上架时间")
  
    public String getGmtOnline() {
      return gmtOnline;
    }
  
  
    public void setGmtOnline(String gmtOnline) {
      this.gmtOnline = gmtOnline;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel grayStrategy(String grayStrategy) {
      
      this.grayStrategy = grayStrategy;
      return this;
    }
  
     /**
     * 小程序灰度比例值，p10-10%的用户，p30-30%的用户，p50-50%的用户
     * @return grayStrategy
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "p10", value = "小程序灰度比例值，p10-10%的用户，p30-30%的用户，p50-50%的用户")
  
    public String getGrayStrategy() {
      return grayStrategy;
    }
  
  
    public void setGrayStrategy(String grayStrategy) {
      this.grayStrategy = grayStrategy;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel memo(String memo) {
      
      this.memo = memo;
      return this;
    }
  
     /**
     * 小程序备注
     * @return memo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "这是一个demo示例", value = "小程序备注")
  
    public String getMemo() {
      return memo;
    }
  
  
    public void setMemo(String memo) {
      this.memo = memo;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel miniAppCategoryInfoList(List<MiniAppCategoryInfo> miniAppCategoryInfoList) {
      
      this.miniAppCategoryInfoList = miniAppCategoryInfoList;
      return this;
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel addMiniAppCategoryInfoListItem(MiniAppCategoryInfo miniAppCategoryInfoListItem) {
      if (this.miniAppCategoryInfoList == null) {
        this.miniAppCategoryInfoList = new ArrayList<>();
      }
      this.miniAppCategoryInfoList.add(miniAppCategoryInfoListItem);
      return this;
    }
  
     /**
     * 小程序类目列表
     * @return miniAppCategoryInfoList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "小程序类目列表")
  
    public List<MiniAppCategoryInfo> getMiniAppCategoryInfoList() {
      return miniAppCategoryInfoList;
    }
  
  
    public void setMiniAppCategoryInfoList(List<MiniAppCategoryInfo> miniAppCategoryInfoList) {
      this.miniAppCategoryInfoList = miniAppCategoryInfoList;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel miniCategoryInfoList(List<MiniAppCategoryInfo> miniCategoryInfoList) {
      
      this.miniCategoryInfoList = miniCategoryInfoList;
      return this;
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel addMiniCategoryInfoListItem(MiniAppCategoryInfo miniCategoryInfoListItem) {
      if (this.miniCategoryInfoList == null) {
        this.miniCategoryInfoList = new ArrayList<>();
      }
      this.miniCategoryInfoList.add(miniCategoryInfoListItem);
      return this;
    }
  
     /**
     * 新小程序类目列表
     * @return miniCategoryInfoList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "新小程序类目列表")
  
    public List<MiniAppCategoryInfo> getMiniCategoryInfoList() {
      return miniCategoryInfoList;
    }
  
  
    public void setMiniCategoryInfoList(List<MiniAppCategoryInfo> miniCategoryInfoList) {
      this.miniCategoryInfoList = miniCategoryInfoList;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel packageInfoList(List<MiniPackageInfo> packageInfoList) {
      
      this.packageInfoList = packageInfoList;
      return this;
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel addPackageInfoListItem(MiniPackageInfo packageInfoListItem) {
      if (this.packageInfoList == null) {
        this.packageInfoList = new ArrayList<>();
      }
      this.packageInfoList.add(packageInfoListItem);
      return this;
    }
  
     /**
     * 小程序功能包列表
     * @return packageInfoList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "小程序功能包列表")
  
    public List<MiniPackageInfo> getPackageInfoList() {
      return packageInfoList;
    }
  
  
    public void setPackageInfoList(List<MiniPackageInfo> packageInfoList) {
      this.packageInfoList = packageInfoList;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel promoteAudit(String promoteAudit) {
      
      this.promoteAudit = promoteAudit;
      return this;
    }
  
     /**
     * 营销审核结果： PASS：通过 REJECT：驳回 （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）
     * @return promoteAudit
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PASS", value = "营销审核结果： PASS：通过 REJECT：驳回 （提审时 audit_rule 传 BASE_PROMOTE 时有该字段）")
  
    public String getPromoteAudit() {
      return promoteAudit;
    }
  
  
    public void setPromoteAudit(String promoteAudit) {
      this.promoteAudit = promoteAudit;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel promoteAuditRecord(MiniAppAuditReason promoteAuditRecord) {
      
      this.promoteAuditRecord = promoteAuditRecord;
      return this;
    }
  
     /**
     * Get promoteAuditRecord
     * @return promoteAuditRecord
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public MiniAppAuditReason getPromoteAuditRecord() {
      return promoteAuditRecord;
    }
  
  
    public void setPromoteAuditRecord(MiniAppAuditReason promoteAuditRecord) {
      this.promoteAuditRecord = promoteAuditRecord;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel rejectReason(String rejectReason) {
      
      this.rejectReason = rejectReason;
      return this;
    }
  
     /**
     * 审核驳回原因
     * @return rejectReason
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "名称太宽泛", value = "审核驳回原因")
  
    public String getRejectReason() {
      return rejectReason;
    }
  
  
    public void setRejectReason(String rejectReason) {
      this.rejectReason = rejectReason;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel scanResult(String scanResult) {
      
      this.scanResult = scanResult;
      return this;
    }
  
     /**
     * 安全扫描结果，True-安全扫描通过，False-安全扫描不通过，NAN-扫描中
     * @return scanResult
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "True", value = "安全扫描结果，True-安全扫描通过，False-安全扫描不通过，NAN-扫描中")
  
    public String getScanResult() {
      return scanResult;
    }
  
  
    public void setScanResult(String scanResult) {
      this.scanResult = scanResult;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel screenShotList(List<String> screenShotList) {
      
      this.screenShotList = screenShotList;
      return this;
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel addScreenShotListItem(String screenShotListItem) {
      if (this.screenShotList == null) {
        this.screenShotList = new ArrayList<>();
      }
      this.screenShotList.add(screenShotListItem);
      return this;
    }
  
     /**
     * 小程序版本截图，多个截图以逗号隔开
     * @return screenShotList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "[\"http://image.aaa.alipay.com\"]", value = "小程序版本截图，多个截图以逗号隔开")
  
    public List<String> getScreenShotList() {
      return screenShotList;
    }
  
  
    public void setScreenShotList(List<String> screenShotList) {
      this.screenShotList = screenShotList;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel serviceEmail(String serviceEmail) {
      
      this.serviceEmail = serviceEmail;
      return this;
    }
  
     /**
     * 客服邮箱
     * @return serviceEmail
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "example@mail.com", value = "客服邮箱")
  
    public String getServiceEmail() {
      return serviceEmail;
    }
  
  
    public void setServiceEmail(String serviceEmail) {
      this.serviceEmail = serviceEmail;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel servicePhone(String servicePhone) {
      
      this.servicePhone = servicePhone;
      return this;
    }
  
     /**
     * 客服电话
     * @return servicePhone
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "13110101010", value = "客服电话")
  
    public String getServicePhone() {
      return servicePhone;
    }
  
  
    public void setServicePhone(String servicePhone) {
      this.servicePhone = servicePhone;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel serviceRegionInfo(List<RegionInfo> serviceRegionInfo) {
      
      this.serviceRegionInfo = serviceRegionInfo;
      return this;
    }
  
    public AlipayOpenMiniVersionDetailQueryResponseModel addServiceRegionInfoItem(RegionInfo serviceRegionInfoItem) {
      if (this.serviceRegionInfo == null) {
        this.serviceRegionInfo = new ArrayList<>();
      }
      this.serviceRegionInfo.add(serviceRegionInfoItem);
      return this;
    }
  
     /**
     * 小程序服务区域信息，当服务区域类型是LOCATION时，这里明确指出具体的服务区域信息
     * @return serviceRegionInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "小程序服务区域信息，当服务区域类型是LOCATION时，这里明确指出具体的服务区域信息")
  
    public List<RegionInfo> getServiceRegionInfo() {
      return serviceRegionInfo;
    }
  
  
    public void setServiceRegionInfo(List<RegionInfo> serviceRegionInfo) {
      this.serviceRegionInfo = serviceRegionInfo;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel serviceRegionType(String serviceRegionType) {
      
      this.serviceRegionType = serviceRegionType;
      return this;
    }
  
     /**
     * 小程序服务区域类型
     * @return serviceRegionType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "LOCATION", value = "小程序服务区域类型")
  
    public String getServiceRegionType() {
      return serviceRegionType;
    }
  
  
    public void setServiceRegionType(String serviceRegionType) {
      this.serviceRegionType = serviceRegionType;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel status(String status) {
      
      this.status = status;
      return this;
    }
  
     /**
     * 小程序版本状态，INIT-开发中，AUDITING-审核中，WAIT_RELEASE-待上架，BASE_AUDIT_PASS-准入不可营销，AUDIT_REJECT-审核驳回，RELEASE-已上架，GRAY-灰度中，OFFLINE-已下架，AUDIT_OFFLINE-已被强制下架
     * @return status
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "INIT", value = "小程序版本状态，INIT-开发中，AUDITING-审核中，WAIT_RELEASE-待上架，BASE_AUDIT_PASS-准入不可营销，AUDIT_REJECT-审核驳回，RELEASE-已上架，GRAY-灰度中，OFFLINE-已下架，AUDIT_OFFLINE-已被强制下架")
  
    public String getStatus() {
      return status;
    }
  
  
    public void setStatus(String status) {
      this.status = status;
    }
  
  
    public AlipayOpenMiniVersionDetailQueryResponseModel versionDesc(String versionDesc) {
      
      this.versionDesc = versionDesc;
      return this;
    }
  
     /**
     * 小程序版本描述
     * @return versionDesc
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "这是一个简单的版本描述", value = "小程序版本描述")
  
    public String getVersionDesc() {
      return versionDesc;
    }
  
  
    public void setVersionDesc(String versionDesc) {
      this.versionDesc = versionDesc;
    }
  
    /**
     * A container for additional, undeclared properties.
     * This is a holder for any undeclared properties as specified with
     * the 'additionalProperties' keyword in the OAS document.
     */
    private Map<String, Object> additionalProperties;
  
    /**
     * Set the additional (undeclared) property with the specified name and value.
     * If the property does not already exist, create it otherwise replace it.
     *
     * @param key name of the property
     * @param value value of the property
     * @return the AlipayOpenMiniVersionDetailQueryResponseModel instance itself
     */
    public AlipayOpenMiniVersionDetailQueryResponseModel putAdditionalProperty(String key, Object value) {
      if (this.additionalProperties == null) {
          this.additionalProperties = new HashMap<String, Object>();
      }
      this.additionalProperties.put(key, value);
      return this;
    }
  
    /**
     * Return the additional (undeclared) property.
     *
     * @return a map of objects
     */
    public Map<String, Object> getAdditionalProperties() {
      return additionalProperties;
    }
  
    /**
     * Return the additional (undeclared) property with the specified name.
     *
     * @param key name of the property
     * @return an object
     */
    public Object getAdditionalProperty(String key) {
      if (this.additionalProperties == null) {
          return null;
      }
      return this.additionalProperties.get(key);
    }
  
  
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      AlipayOpenMiniVersionDetailQueryResponseModel alipayOpenMiniVersionDetailQueryResponseModel = (AlipayOpenMiniVersionDetailQueryResponseModel) o;
      return Objects.equals(this.appDesc, alipayOpenMiniVersionDetailQueryResponseModel.appDesc) &&
          Objects.equals(this.appEnglishName, alipayOpenMiniVersionDetailQueryResponseModel.appEnglishName) &&
          Objects.equals(this.appLogo, alipayOpenMiniVersionDetailQueryResponseModel.appLogo) &&
          Objects.equals(this.appName, alipayOpenMiniVersionDetailQueryResponseModel.appName) &&
          Objects.equals(this.appSlogan, alipayOpenMiniVersionDetailQueryResponseModel.appSlogan) &&
          Objects.equals(this.appVersion, alipayOpenMiniVersionDetailQueryResponseModel.appVersion) &&
          Objects.equals(this.baseAudit, alipayOpenMiniVersionDetailQueryResponseModel.baseAudit) &&
          Objects.equals(this.baseAuditRecord, alipayOpenMiniVersionDetailQueryResponseModel.baseAuditRecord) &&
          Objects.equals(this.canRelease, alipayOpenMiniVersionDetailQueryResponseModel.canRelease) &&
          Objects.equals(this.gmtApplyAudit, alipayOpenMiniVersionDetailQueryResponseModel.gmtApplyAudit) &&
          Objects.equals(this.gmtAuditEnd, alipayOpenMiniVersionDetailQueryResponseModel.gmtAuditEnd) &&
          Objects.equals(this.gmtCreate, alipayOpenMiniVersionDetailQueryResponseModel.gmtCreate) &&
          Objects.equals(this.gmtOffline, alipayOpenMiniVersionDetailQueryResponseModel.gmtOffline) &&
          Objects.equals(this.gmtOnline, alipayOpenMiniVersionDetailQueryResponseModel.gmtOnline) &&
          Objects.equals(this.grayStrategy, alipayOpenMiniVersionDetailQueryResponseModel.grayStrategy) &&
          Objects.equals(this.memo, alipayOpenMiniVersionDetailQueryResponseModel.memo) &&
          Objects.equals(this.miniAppCategoryInfoList, alipayOpenMiniVersionDetailQueryResponseModel.miniAppCategoryInfoList) &&
          Objects.equals(this.miniCategoryInfoList, alipayOpenMiniVersionDetailQueryResponseModel.miniCategoryInfoList) &&
          Objects.equals(this.packageInfoList, alipayOpenMiniVersionDetailQueryResponseModel.packageInfoList) &&
          Objects.equals(this.promoteAudit, alipayOpenMiniVersionDetailQueryResponseModel.promoteAudit) &&
          Objects.equals(this.promoteAuditRecord, alipayOpenMiniVersionDetailQueryResponseModel.promoteAuditRecord) &&
          Objects.equals(this.rejectReason, alipayOpenMiniVersionDetailQueryResponseModel.rejectReason) &&
          Objects.equals(this.scanResult, alipayOpenMiniVersionDetailQueryResponseModel.scanResult) &&
          Objects.equals(this.screenShotList, alipayOpenMiniVersionDetailQueryResponseModel.screenShotList) &&
          Objects.equals(this.serviceEmail, alipayOpenMiniVersionDetailQueryResponseModel.serviceEmail) &&
          Objects.equals(this.servicePhone, alipayOpenMiniVersionDetailQueryResponseModel.servicePhone) &&
          Objects.equals(this.serviceRegionInfo, alipayOpenMiniVersionDetailQueryResponseModel.serviceRegionInfo) &&
          Objects.equals(this.serviceRegionType, alipayOpenMiniVersionDetailQueryResponseModel.serviceRegionType) &&
          Objects.equals(this.status, alipayOpenMiniVersionDetailQueryResponseModel.status) &&
          Objects.equals(this.versionDesc, alipayOpenMiniVersionDetailQueryResponseModel.versionDesc)&&
          Objects.equals(this.additionalProperties, alipayOpenMiniVersionDetailQueryResponseModel.additionalProperties);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(appDesc, appEnglishName, appLogo, appName, appSlogan, appVersion, baseAudit, baseAuditRecord, canRelease, gmtApplyAudit, gmtAuditEnd, gmtCreate, gmtOffline, gmtOnline, grayStrategy, memo, miniAppCategoryInfoList, miniCategoryInfoList, packageInfoList, promoteAudit, promoteAuditRecord, rejectReason, scanResult, screenShotList, serviceEmail, servicePhone, serviceRegionInfo, serviceRegionType, status, versionDesc, additionalProperties);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class AlipayOpenMiniVersionDetailQueryResponseModel {\n");
      sb.append("    appDesc: ").append(toIndentedString(appDesc)).append("\n");
      sb.append("    appEnglishName: ").append(toIndentedString(appEnglishName)).append("\n");
      sb.append("    appLogo: ").append(toIndentedString(appLogo)).append("\n");
      sb.append("    appName: ").append(toIndentedString(appName)).append("\n");
      sb.append("    appSlogan: ").append(toIndentedString(appSlogan)).append("\n");
      sb.append("    appVersion: ").append(toIndentedString(appVersion)).append("\n");
      sb.append("    baseAudit: ").append(toIndentedString(baseAudit)).append("\n");
      sb.append("    baseAuditRecord: ").append(toIndentedString(baseAuditRecord)).append("\n");
      sb.append("    canRelease: ").append(toIndentedString(canRelease)).append("\n");
      sb.append("    gmtApplyAudit: ").append(toIndentedString(gmtApplyAudit)).append("\n");
      sb.append("    gmtAuditEnd: ").append(toIndentedString(gmtAuditEnd)).append("\n");
      sb.append("    gmtCreate: ").append(toIndentedString(gmtCreate)).append("\n");
      sb.append("    gmtOffline: ").append(toIndentedString(gmtOffline)).append("\n");
      sb.append("    gmtOnline: ").append(toIndentedString(gmtOnline)).append("\n");
      sb.append("    grayStrategy: ").append(toIndentedString(grayStrategy)).append("\n");
      sb.append("    memo: ").append(toIndentedString(memo)).append("\n");
      sb.append("    miniAppCategoryInfoList: ").append(toIndentedString(miniAppCategoryInfoList)).append("\n");
      sb.append("    miniCategoryInfoList: ").append(toIndentedString(miniCategoryInfoList)).append("\n");
      sb.append("    packageInfoList: ").append(toIndentedString(packageInfoList)).append("\n");
      sb.append("    promoteAudit: ").append(toIndentedString(promoteAudit)).append("\n");
      sb.append("    promoteAuditRecord: ").append(toIndentedString(promoteAuditRecord)).append("\n");
      sb.append("    rejectReason: ").append(toIndentedString(rejectReason)).append("\n");
      sb.append("    scanResult: ").append(toIndentedString(scanResult)).append("\n");
      sb.append("    screenShotList: ").append(toIndentedString(screenShotList)).append("\n");
      sb.append("    serviceEmail: ").append(toIndentedString(serviceEmail)).append("\n");
      sb.append("    servicePhone: ").append(toIndentedString(servicePhone)).append("\n");
      sb.append("    serviceRegionInfo: ").append(toIndentedString(serviceRegionInfo)).append("\n");
      sb.append("    serviceRegionType: ").append(toIndentedString(serviceRegionType)).append("\n");
      sb.append("    status: ").append(toIndentedString(status)).append("\n");
      sb.append("    versionDesc: ").append(toIndentedString(versionDesc)).append("\n");
      sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
      sb.append("}");
      return sb.toString();
    }
  
    /**
     * Convert the given object to string with each line indented by 4 spaces
     * (except the first line).
     */
    private String toIndentedString(Object o) {
      if (o == null) {
        return "null";
      }
      return o.toString().replace("\n", "\n    ");
    }
  
  
    public static HashSet<String> openapiFields;
    public static HashSet<String> openapiRequiredFields;
  
    static {
      // a set of all properties/fields (JSON key names)
      openapiFields = new HashSet<String>();
      openapiFields.add("app_desc");
      openapiFields.add("app_english_name");
      openapiFields.add("app_logo");
      openapiFields.add("app_name");
      openapiFields.add("app_slogan");
      openapiFields.add("app_version");
      openapiFields.add("base_audit");
      openapiFields.add("base_audit_record");
      openapiFields.add("can_release");
      openapiFields.add("gmt_apply_audit");
      openapiFields.add("gmt_audit_end");
      openapiFields.add("gmt_create");
      openapiFields.add("gmt_offline");
      openapiFields.add("gmt_online");
      openapiFields.add("gray_strategy");
      openapiFields.add("memo");
      openapiFields.add("mini_app_category_info_list");
      openapiFields.add("mini_category_info_list");
      openapiFields.add("package_info_list");
      openapiFields.add("promote_audit");
      openapiFields.add("promote_audit_record");
      openapiFields.add("reject_reason");
      openapiFields.add("scan_result");
      openapiFields.add("screen_shot_list");
      openapiFields.add("service_email");
      openapiFields.add("service_phone");
      openapiFields.add("service_region_info");
      openapiFields.add("service_region_type");
      openapiFields.add("status");
      openapiFields.add("version_desc");
  
      // a set of required properties/fields (JSON key names)
      openapiRequiredFields = new HashSet<String>();
    }
  
   /**
    * Validates the JSON Object and throws an exception if issues found
    *
    * @param jsonObj JSON Object
    * @throws IOException if the JSON Object is invalid with respect to AlipayOpenMiniVersionDetailQueryResponseModel
    */
    public static void validateJsonObject(JsonObject jsonObj) throws IOException {
        if (jsonObj == null) {
          if (AlipayOpenMiniVersionDetailQueryResponseModel.openapiRequiredFields.isEmpty()) {
            return;
          } else { // has required fields
            throw new IllegalArgumentException(String.format("The required field(s) %s in AlipayOpenMiniVersionDetailQueryResponseModel is not found in the empty JSON string", AlipayOpenMiniVersionDetailQueryResponseModel.openapiRequiredFields.toString()));
          }
        }
        if (jsonObj.get("app_desc") != null && !jsonObj.get("app_desc").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_desc` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_desc").toString()));
        }
        if (jsonObj.get("app_english_name") != null && !jsonObj.get("app_english_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_english_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_english_name").toString()));
        }
        if (jsonObj.get("app_logo") != null && !jsonObj.get("app_logo").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_logo` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_logo").toString()));
        }
        if (jsonObj.get("app_name") != null && !jsonObj.get("app_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_name").toString()));
        }
        if (jsonObj.get("app_slogan") != null && !jsonObj.get("app_slogan").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_slogan` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_slogan").toString()));
        }
        if (jsonObj.get("app_version") != null && !jsonObj.get("app_version").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `app_version` to be a primitive type in the JSON string but got `%s`", jsonObj.get("app_version").toString()));
        }
        if (jsonObj.get("base_audit") != null && !jsonObj.get("base_audit").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `base_audit` to be a primitive type in the JSON string but got `%s`", jsonObj.get("base_audit").toString()));
        }
        // validate the optional field `base_audit_record`
        if (jsonObj.getAsJsonObject("base_audit_record") != null) {
          MiniAppAuditReason.validateJsonObject(jsonObj.getAsJsonObject("base_audit_record"));
        }
        if (jsonObj.get("can_release") != null && !jsonObj.get("can_release").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `can_release` to be a primitive type in the JSON string but got `%s`", jsonObj.get("can_release").toString()));
        }
        if (jsonObj.get("gmt_apply_audit") != null && !jsonObj.get("gmt_apply_audit").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gmt_apply_audit` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gmt_apply_audit").toString()));
        }
        if (jsonObj.get("gmt_audit_end") != null && !jsonObj.get("gmt_audit_end").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gmt_audit_end` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gmt_audit_end").toString()));
        }
        if (jsonObj.get("gmt_create") != null && !jsonObj.get("gmt_create").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gmt_create` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gmt_create").toString()));
        }
        if (jsonObj.get("gmt_offline") != null && !jsonObj.get("gmt_offline").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gmt_offline` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gmt_offline").toString()));
        }
        if (jsonObj.get("gmt_online") != null && !jsonObj.get("gmt_online").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gmt_online` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gmt_online").toString()));
        }
        if (jsonObj.get("gray_strategy") != null && !jsonObj.get("gray_strategy").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gray_strategy` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gray_strategy").toString()));
        }
        if (jsonObj.get("memo") != null && !jsonObj.get("memo").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `memo` to be a primitive type in the JSON string but got `%s`", jsonObj.get("memo").toString()));
        }
        JsonArray jsonArrayminiAppCategoryInfoList = jsonObj.getAsJsonArray("mini_app_category_info_list");
        if (jsonArrayminiAppCategoryInfoList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("mini_app_category_info_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `mini_app_category_info_list` to be an array in the JSON string but got `%s`", jsonObj.get("mini_app_category_info_list").toString()));
          }
  
          // validate the optional field `mini_app_category_info_list` (array)
          for (int i = 0; i < jsonArrayminiAppCategoryInfoList.size(); i++) {
            MiniAppCategoryInfo.validateJsonObject(jsonArrayminiAppCategoryInfoList.get(i).getAsJsonObject());
          };
        }
        JsonArray jsonArrayminiCategoryInfoList = jsonObj.getAsJsonArray("mini_category_info_list");
        if (jsonArrayminiCategoryInfoList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("mini_category_info_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `mini_category_info_list` to be an array in the JSON string but got `%s`", jsonObj.get("mini_category_info_list").toString()));
          }
  
          // validate the optional field `mini_category_info_list` (array)
          for (int i = 0; i < jsonArrayminiCategoryInfoList.size(); i++) {
            MiniAppCategoryInfo.validateJsonObject(jsonArrayminiCategoryInfoList.get(i).getAsJsonObject());
          };
        }
        JsonArray jsonArraypackageInfoList = jsonObj.getAsJsonArray("package_info_list");
        if (jsonArraypackageInfoList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("package_info_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `package_info_list` to be an array in the JSON string but got `%s`", jsonObj.get("package_info_list").toString()));
          }
  
          // validate the optional field `package_info_list` (array)
          for (int i = 0; i < jsonArraypackageInfoList.size(); i++) {
            MiniPackageInfo.validateJsonObject(jsonArraypackageInfoList.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("promote_audit") != null && !jsonObj.get("promote_audit").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `promote_audit` to be a primitive type in the JSON string but got `%s`", jsonObj.get("promote_audit").toString()));
        }
        // validate the optional field `promote_audit_record`
        if (jsonObj.getAsJsonObject("promote_audit_record") != null) {
          MiniAppAuditReason.validateJsonObject(jsonObj.getAsJsonObject("promote_audit_record"));
        }
        if (jsonObj.get("reject_reason") != null && !jsonObj.get("reject_reason").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `reject_reason` to be a primitive type in the JSON string but got `%s`", jsonObj.get("reject_reason").toString()));
        }
        if (jsonObj.get("scan_result") != null && !jsonObj.get("scan_result").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `scan_result` to be a primitive type in the JSON string but got `%s`", jsonObj.get("scan_result").toString()));
        }
        // ensure the json data is an array
        if (jsonObj.get("screen_shot_list") != null && !jsonObj.get("screen_shot_list").isJsonArray()) {
          throw new IllegalArgumentException(String.format("Expected the field `screen_shot_list` to be an array in the JSON string but got `%s`", jsonObj.get("screen_shot_list").toString()));
        }
        if (jsonObj.get("service_email") != null && !jsonObj.get("service_email").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `service_email` to be a primitive type in the JSON string but got `%s`", jsonObj.get("service_email").toString()));
        }
        if (jsonObj.get("service_phone") != null && !jsonObj.get("service_phone").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `service_phone` to be a primitive type in the JSON string but got `%s`", jsonObj.get("service_phone").toString()));
        }
        JsonArray jsonArrayserviceRegionInfo = jsonObj.getAsJsonArray("service_region_info");
        if (jsonArrayserviceRegionInfo != null) {
          // ensure the json data is an array
          if (!jsonObj.get("service_region_info").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `service_region_info` to be an array in the JSON string but got `%s`", jsonObj.get("service_region_info").toString()));
          }
  
          // validate the optional field `service_region_info` (array)
          for (int i = 0; i < jsonArrayserviceRegionInfo.size(); i++) {
            RegionInfo.validateJsonObject(jsonArrayserviceRegionInfo.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("service_region_type") != null && !jsonObj.get("service_region_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `service_region_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("service_region_type").toString()));
        }
        if (jsonObj.get("status") != null && !jsonObj.get("status").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("status").toString()));
        }
        if (jsonObj.get("version_desc") != null && !jsonObj.get("version_desc").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `version_desc` to be a primitive type in the JSON string but got `%s`", jsonObj.get("version_desc").toString()));
        }
    }
  
    public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
      @SuppressWarnings("unchecked")
      @Override
      public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
         if (!AlipayOpenMiniVersionDetailQueryResponseModel.class.isAssignableFrom(type.getRawType())) {
           return null; // this class only serializes 'AlipayOpenMiniVersionDetailQueryResponseModel' and its subtypes
         }
         final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
         final TypeAdapter<AlipayOpenMiniVersionDetailQueryResponseModel> thisAdapter
                          = gson.getDelegateAdapter(this, TypeToken.get(AlipayOpenMiniVersionDetailQueryResponseModel.class));
  
         return (TypeAdapter<T>) new TypeAdapter<AlipayOpenMiniVersionDetailQueryResponseModel>() {
             @Override
             public void write(JsonWriter out, AlipayOpenMiniVersionDetailQueryResponseModel value) throws IOException {
               JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
               obj.remove("additionalProperties");
               // serialize additonal properties
               if (value.getAdditionalProperties() != null) {
                 for (Map.Entry<String, Object> entry : value.getAdditionalProperties().entrySet()) {
                   if (entry.getValue() instanceof String)
                     obj.addProperty(entry.getKey(), (String) entry.getValue());
                   else if (entry.getValue() instanceof Number)
                     obj.addProperty(entry.getKey(), (Number) entry.getValue());
                   else if (entry.getValue() instanceof Boolean)
                     obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
                   else if (entry.getValue() instanceof Character)
                     obj.addProperty(entry.getKey(), (Character) entry.getValue());
                   else {
                     obj.add(entry.getKey(), gson.toJsonTree(entry.getValue()).getAsJsonObject());
                   }
                 }
               }
               elementAdapter.write(out, obj);
             }
  
             @Override
             public AlipayOpenMiniVersionDetailQueryResponseModel read(JsonReader in) throws IOException {
               JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
               validateJsonObject(jsonObj);
               // store additional fields in the deserialized instance
               AlipayOpenMiniVersionDetailQueryResponseModel instance = thisAdapter.fromJsonTree(jsonObj);
               for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
                 if (!openapiFields.contains(entry.getKey())) {
                   if (entry.getValue().isJsonPrimitive()) { // primitive type
                     if (entry.getValue().getAsJsonPrimitive().isString())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
                     else if (entry.getValue().getAsJsonPrimitive().isNumber())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
                     else if (entry.getValue().getAsJsonPrimitive().isBoolean())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
                     else
                       throw new IllegalArgumentException(String.format("The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
                   } else { // non-primitive type
                     instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
                   }
                 }
               }
               return instance;
             }
  
         }.nullSafe();
      }
    }
  
   /**
    * Create an instance of AlipayOpenMiniVersionDetailQueryResponseModel given an JSON string
    *
    * @param jsonString JSON string
    * @return An instance of AlipayOpenMiniVersionDetailQueryResponseModel
    * @throws IOException if the JSON string is invalid with respect to AlipayOpenMiniVersionDetailQueryResponseModel
    */
    public static AlipayOpenMiniVersionDetailQueryResponseModel fromJson(String jsonString) throws IOException {
      return JSON.getGson().fromJson(jsonString, AlipayOpenMiniVersionDetailQueryResponseModel.class);
    }
  
   /**
    * Convert an instance of AlipayOpenMiniVersionDetailQueryResponseModel to an JSON string
    *
    * @return JSON string
    */
    public String toJson() {
      return JSON.getGson().toJson(this);
    }
  }
  
  