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.ConversionProperty;
  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;
  
  /**
   * ConversionData
   */
  @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
  public class ConversionData {
    public static final String SERIALIZED_NAME_AD_ID = "ad_id";
    @SerializedName(SERIALIZED_NAME_AD_ID)
    private String adId;
  
    public static final String SERIALIZED_NAME_ATTRIBUTE_LIST = "attribute_list";
    @SerializedName(SERIALIZED_NAME_ATTRIBUTE_LIST)
    private List<ConversionProperty> attributeList = null;
  
    public static final String SERIALIZED_NAME_ATTRIBUTES = "attributes";
    @SerializedName(SERIALIZED_NAME_ATTRIBUTES)
    private ConversionProperty attributes;
  
    public static final String SERIALIZED_NAME_BIZ_NO = "biz_no";
    @SerializedName(SERIALIZED_NAME_BIZ_NO)
    private String bizNo;
  
    public static final String SERIALIZED_NAME_CALLBACK_EXT_INFO = "callback_ext_info";
    @SerializedName(SERIALIZED_NAME_CALLBACK_EXT_INFO)
    private String callbackExtInfo;
  
    public static final String SERIALIZED_NAME_CID = "cid";
    @SerializedName(SERIALIZED_NAME_CID)
    private String cid;
  
    public static final String SERIALIZED_NAME_CONVERSION_AMOUNT = "conversion_amount";
    @SerializedName(SERIALIZED_NAME_CONVERSION_AMOUNT)
    private String conversionAmount;
  
    public static final String SERIALIZED_NAME_CONVERSION_ID = "conversion_id";
    @SerializedName(SERIALIZED_NAME_CONVERSION_ID)
    private String conversionId;
  
    public static final String SERIALIZED_NAME_CONVERSION_TIME = "conversion_time";
    @SerializedName(SERIALIZED_NAME_CONVERSION_TIME)
    private Integer conversionTime;
  
    public static final String SERIALIZED_NAME_CONVERSION_TYPE = "conversion_type";
    @SerializedName(SERIALIZED_NAME_CONVERSION_TYPE)
    private String conversionType;
  
    public static final String SERIALIZED_NAME_CREATIVE_ID = "creative_id";
    @SerializedName(SERIALIZED_NAME_CREATIVE_ID)
    private String creativeId;
  
    public static final String SERIALIZED_NAME_DATA_ID = "data_id";
    @SerializedName(SERIALIZED_NAME_DATA_ID)
    private String dataId;
  
    public static final String SERIALIZED_NAME_DATA_SRC_TYPE = "data_src_type";
    @SerializedName(SERIALIZED_NAME_DATA_SRC_TYPE)
    private String dataSrcType;
  
    public static final String SERIALIZED_NAME_GROUP_ID = "group_id";
    @SerializedName(SERIALIZED_NAME_GROUP_ID)
    private String groupId;
  
    public static final String SERIALIZED_NAME_JOIN_CHANNEL = "join_channel";
    @SerializedName(SERIALIZED_NAME_JOIN_CHANNEL)
    private String joinChannel;
  
    public static final String SERIALIZED_NAME_PLAN_ID = "plan_id";
    @SerializedName(SERIALIZED_NAME_PLAN_ID)
    private String planId;
  
    public static final String SERIALIZED_NAME_PRINCIPAL_ID = "principal_id";
    @SerializedName(SERIALIZED_NAME_PRINCIPAL_ID)
    private String principalId;
  
    public static final String SERIALIZED_NAME_PRINCIPAL_TAG = "principal_tag";
    @SerializedName(SERIALIZED_NAME_PRINCIPAL_TAG)
    private String principalTag;
  
    public static final String SERIALIZED_NAME_PROPERTY_LIST = "property_list";
    @SerializedName(SERIALIZED_NAME_PROPERTY_LIST)
    private List<ConversionProperty> propertyList = null;
  
    public static final String SERIALIZED_NAME_SOURCE = "source";
    @SerializedName(SERIALIZED_NAME_SOURCE)
    private String source;
  
    public static final String SERIALIZED_NAME_TARGET_ID = "target_id";
    @SerializedName(SERIALIZED_NAME_TARGET_ID)
    private String targetId;
  
    public static final String SERIALIZED_NAME_TARGET_TYPE = "target_type";
    @SerializedName(SERIALIZED_NAME_TARGET_TYPE)
    private String targetType;
  
    public static final String SERIALIZED_NAME_UUID = "uuid";
    @SerializedName(SERIALIZED_NAME_UUID)
    private String uuid;
  
    public static final String SERIALIZED_NAME_UUID_OPEN_ID = "uuid_open_id";
    @SerializedName(SERIALIZED_NAME_UUID_OPEN_ID)
    private String uuidOpenId;
  
    public static final String SERIALIZED_NAME_UUID_TYPE = "uuid_type";
    @SerializedName(SERIALIZED_NAME_UUID_TYPE)
    private String uuidType;
  
    public ConversionData() { 
    }
  
    public ConversionData adId(String adId) {
      
      this.adId = adId;
      return this;
    }
  
     /**
     * 广告创意id，来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__AD_ID__宏参发生用户点击替换后的值
     * @return adId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123", value = "广告创意id，来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__AD_ID__宏参发生用户点击替换后的值")
  
    public String getAdId() {
      return adId;
    }
  
  
    public void setAdId(String adId) {
      this.adId = adId;
    }
  
  
    public ConversionData attributeList(List<ConversionProperty> attributeList) {
      
      this.attributeList = attributeList;
      return this;
    }
  
    public ConversionData addAttributeListItem(ConversionProperty attributeListItem) {
      if (this.attributeList == null) {
        this.attributeList = new ArrayList<>();
      }
      this.attributeList.add(attributeListItem);
      return this;
    }
  
     /**
     * 转化事件属性信息，用于转化事件类型相关属性规则上传。 可支持上传属性的转化事件类型及属性规则请参考该文档：&lt;a href&#x3D;&#39;https://adpub.alipay.com/adrlark/ivdktpyh511x9r6i&#39;&gt;转化事件类型属性规则&lt;/a&gt;
     * @return attributeList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "转化事件属性信息，用于转化事件类型相关属性规则上传。 可支持上传属性的转化事件类型及属性规则请参考该文档：<a href='https://adpub.alipay.com/adrlark/ivdktpyh511x9r6i'>转化事件类型属性规则</a>")
  
    public List<ConversionProperty> getAttributeList() {
      return attributeList;
    }
  
  
    public void setAttributeList(List<ConversionProperty> attributeList) {
      this.attributeList = attributeList;
    }
  
  
    public ConversionData attributes(ConversionProperty attributes) {
      
      this.attributes = attributes;
      return this;
    }
  
     /**
     * Get attributes
     * @return attributes
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "")
  
    public ConversionProperty getAttributes() {
      return attributes;
    }
  
  
    public void setAttributes(ConversionProperty attributes) {
      this.attributes = attributes;
    }
  
  
    public ConversionData bizNo(String bizNo) {
      
      this.bizNo = bizNo;
      return this;
    }
  
     /**
     * 转化流水号：由用户自定义，用于幂等
     * @return bizNo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "Zybnom890437Mvcu", value = "转化流水号：由用户自定义，用于幂等")
  
    public String getBizNo() {
      return bizNo;
    }
  
  
    public void setBizNo(String bizNo) {
      this.bizNo = bizNo;
    }
  
  
    public ConversionData callbackExtInfo(String callbackExtInfo) {
      
      this.callbackExtInfo = callbackExtInfo;
      return this;
    }
  
     /**
     * 来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__CALLBACK_EXT_INFO__宏参发生用户点击替换后的值，需url decode后传回。
     * @return callbackExtInfo
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "hAXLRVRoQHTgh2CQLhjfkX_0HR80F7ktEabHmKgD_XSSXPF2Pwv-a_pEAQVW2FS-6FCLShsXMMU4Ctx0X61swqcK4Qme3YdxzrjynZ_gYjQ8Iv4MNcM0d8oHKFiDWyOx", value = "来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__CALLBACK_EXT_INFO__宏参发生用户点击替换后的值，需url decode后传回。")
  
    public String getCallbackExtInfo() {
      return callbackExtInfo;
    }
  
  
    public void setCallbackExtInfo(String callbackExtInfo) {
      this.callbackExtInfo = callbackExtInfo;
    }
  
  
    public ConversionData cid(String cid) {
      
      this.cid = cid;
      return this;
    }
  
     /**
     * 用于精准归因，来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__CID__宏参发生用户点击替换后的值。&lt;br&gt; 支持cid上报的转化事件类型请参见：&lt;br&gt; &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b&#39;&gt;app推广类转化事件类型&lt;/a&gt;&lt;br&gt; &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt&#39;&gt;通用类转化事件类型&lt;/a&gt;
     * @return cid
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8e91eca2-930d-4b4e-bb38-1ba74146cd06", value = "用于精准归因，来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__CID__宏参发生用户点击替换后的值。<br> 支持cid上报的转化事件类型请参见：<br> <a href='https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b'>app推广类转化事件类型</a><br> <a href='https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt'>通用类转化事件类型</a>")
  
    public String getCid() {
      return cid;
    }
  
  
    public void setCid(String cid) {
      this.cid = cid;
    }
  
  
    public ConversionData conversionAmount(String conversionAmount) {
      
      this.conversionAmount = conversionAmount;
      return this;
    }
  
     /**
     * 转化金额，单位分。 金额类转化事件必传
     * @return conversionAmount
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "20", value = "转化金额，单位分。 金额类转化事件必传")
  
    public String getConversionAmount() {
      return conversionAmount;
    }
  
  
    public void setConversionAmount(String conversionAmount) {
      this.conversionAmount = conversionAmount;
    }
  
  
    public ConversionData conversionId(String conversionId) {
      
      this.conversionId = conversionId;
      return this;
    }
  
     /**
     * 转化事件id，当source&#x3D;COMMON_CONVERSION_ID需上传该字段，其他情况无需上传。
     * @return conversionId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "167390987332", value = "转化事件id，当source=COMMON_CONVERSION_ID需上传该字段，其他情况无需上传。")
  
    public String getConversionId() {
      return conversionId;
    }
  
  
    public void setConversionId(String conversionId) {
      this.conversionId = conversionId;
    }
  
  
    public ConversionData conversionTime(Integer conversionTime) {
      
      this.conversionTime = conversionTime;
      return this;
    }
  
     /**
     * 转化时间，UTC 时间戳，单位：秒
     * @return conversionTime
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "12389637", value = "转化时间，UTC 时间戳，单位：秒")
  
    public Integer getConversionTime() {
      return conversionTime;
    }
  
  
    public void setConversionTime(Integer conversionTime) {
      this.conversionTime = conversionTime;
    }
  
  
    public ConversionData conversionType(String conversionType) {
      
      this.conversionType = conversionType;
      return this;
    }
  
     /**
     * 转化事件类型数字
     * @return conversionType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "225", value = "转化事件类型数字")
  
    public String getConversionType() {
      return conversionType;
    }
  
  
    public void setConversionType(String conversionType) {
      this.conversionType = conversionType;
    }
  
  
    public ConversionData creativeId(String creativeId) {
      
      this.creativeId = creativeId;
      return this;
    }
  
     /**
     * 广告创意id，来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__AD_ID__宏参发生用户点击替换后的值
     * @return creativeId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "6785", value = "广告创意id，来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__AD_ID__宏参发生用户点击替换后的值")
  
    public String getCreativeId() {
      return creativeId;
    }
  
  
    public void setCreativeId(String creativeId) {
      this.creativeId = creativeId;
    }
  
  
    public ConversionData dataId(String dataId) {
      
      this.dataId = dataId;
      return this;
    }
  
     /**
     * 当source&#x3D;XLIGHT或者DATASET时使用：  数据集id(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)
     * @return dataId
     * @deprecated
    **/
    @Deprecated
    @javax.annotation.Nullable
    @ApiModelProperty(example = "20391", value = "当source=XLIGHT或者DATASET时使用：  数据集id(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)")
  
    public String getDataId() {
      return dataId;
    }
  
  
    public void setDataId(String dataId) {
      this.dataId = dataId;
    }
  
  
    public ConversionData dataSrcType(String dataSrcType) {
      
      this.dataSrcType = dataSrcType;
      return this;
    }
  
     /**
     * 当source&#x3D;OTHER时使用:  数据类型： KR_MEMBER - 客如云入会 KR_TRADE - 客如云交易 TB_LIVE -  淘宝直播(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)
     * @return dataSrcType
     * @deprecated
    **/
    @Deprecated
    @javax.annotation.Nullable
    @ApiModelProperty(example = "KR_MEMBER", value = "当source=OTHER时使用:  数据类型： KR_MEMBER - 客如云入会 KR_TRADE - 客如云交易 TB_LIVE -  淘宝直播(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)")
  
    public String getDataSrcType() {
      return dataSrcType;
    }
  
  
    public void setDataSrcType(String dataSrcType) {
      this.dataSrcType = dataSrcType;
    }
  
  
    public ConversionData groupId(String groupId) {
      
      this.groupId = groupId;
      return this;
    }
  
     /**
     * 广告单元id，来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__GROUP_ID__宏参发生用户点击替换后的值
     * @return groupId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "7896", value = "广告单元id，来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__GROUP_ID__宏参发生用户点击替换后的值")
  
    public String getGroupId() {
      return groupId;
    }
  
  
    public void setGroupId(String groupId) {
      this.groupId = groupId;
    }
  
  
    public ConversionData joinChannel(String joinChannel) {
      
      this.joinChannel = joinChannel;
      return this;
    }
  
     /**
     * XLIGHT - 灯火归因 MERCHANT -商家自主归因 该字段若为空则默认为XLIGHT
     * @return joinChannel
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "XLIGHT", value = "XLIGHT - 灯火归因 MERCHANT -商家自主归因 该字段若为空则默认为XLIGHT")
  
    public String getJoinChannel() {
      return joinChannel;
    }
  
  
    public void setJoinChannel(String joinChannel) {
      this.joinChannel = joinChannel;
    }
  
  
    public ConversionData planId(String planId) {
      
      this.planId = planId;
      return this;
    }
  
     /**
     * 广告计划id，来自：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的__PLAN_ID__宏参发生用户点击替换后的值
     * @return planId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "1789", value = "广告计划id，来自：<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的__PLAN_ID__宏参发生用户点击替换后的值")
  
    public String getPlanId() {
      return planId;
    }
  
  
    public void setPlanId(String planId) {
      this.planId = planId;
    }
  
  
    public ConversionData principalId(String principalId) {
      
      this.principalId = principalId;
      return this;
    }
  
     /**
     * 商户在灯火pb端的id, 可代替principal_tag。
     * @return principalId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "1", value = "商户在灯火pb端的id, 可代替principal_tag。")
  
    public String getPrincipalId() {
      return principalId;
    }
  
  
    public void setPrincipalId(String principalId) {
      this.principalId = principalId;
    }
  
  
    public ConversionData principalTag(String principalTag) {
      
      this.principalTag = principalTag;
      return this;
    }
  
     /**
     * 商家标志，可代替principal_id。获取方法： &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/sbk3vetg6ki5m4r8&#39;&gt;principal_tag获取sop&lt;/a&gt;&lt;br&gt;
     * @return principalTag
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "HYjofejnnlp89730202bcklHH", value = "商家标志，可代替principal_id。获取方法： <a href='https://adpub.alipay.com/lark/adrlark/sbk3vetg6ki5m4r8'>principal_tag获取sop</a><br>")
  
    public String getPrincipalTag() {
      return principalTag;
    }
  
  
    public void setPrincipalTag(String principalTag) {
      this.principalTag = principalTag;
    }
  
  
    public ConversionData propertyList(List<ConversionProperty> propertyList) {
      
      this.propertyList = propertyList;
      return this;
    }
  
    public ConversionData addPropertyListItem(ConversionProperty propertyListItem) {
      if (this.propertyList == null) {
        this.propertyList = new ArrayList<>();
      }
      this.propertyList.add(propertyListItem);
      return this;
    }
  
     /**
     * 转化归因字段列表。不同转化事件类型回传property_list不同。请参见回传示例：&lt;br&gt; &lt;a href&#x3D;\&quot;https://adpub.alipay.com/lark/adrlark/pvbgwf72ea090877\&quot;&gt;通用类转化事件回传示例&lt;/a&gt;&lt;br&gt; &lt;a href&#x3D;\&quot;https://adpub.alipay.com/lark/adrlark/kgnnk94p0p1mwbgp\&quot;&gt;APP推广类转化事件回传示例&lt;/a&gt;&lt;br&gt;
     * @return propertyList
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(value = "转化归因字段列表。不同转化事件类型回传property_list不同。请参见回传示例：<br> <a href=\"https://adpub.alipay.com/lark/adrlark/pvbgwf72ea090877\">通用类转化事件回传示例</a><br> <a href=\"https://adpub.alipay.com/lark/adrlark/kgnnk94p0p1mwbgp\">APP推广类转化事件回传示例</a><br>")
  
    public List<ConversionProperty> getPropertyList() {
      return propertyList;
    }
  
  
    public void setPropertyList(List<ConversionProperty> propertyList) {
      this.propertyList = propertyList;
    }
  
  
    public ConversionData source(String source) {
      
      this.source = source;
      return this;
    }
  
     /**
     * &lt;br&gt; COMMON_TARGET：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt&#39;&gt;通用类转化事件类型&lt;/a&gt;适用&lt;br&gt; CALLBACK：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b&#39;&gt;APP推广类转化事件类型&lt;/a&gt;适用&lt;br&gt; 不同source的参数回传规则请参考： COMMON_TARGET：&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/dxw7fkkdnhm45spm&#39;&gt;通用转化回传参数说明&lt;/a&gt;&lt;br&gt; CALLBACK： &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/wxou6agg3z1o6wyn&#39;&gt;APP推广类转化回传参数说明&lt;/a&gt;
     * @return source
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "COMMON_TARGET", value = "<br> COMMON_TARGET：<a href='https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt'>通用类转化事件类型</a>适用<br> CALLBACK：<a href='https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b'>APP推广类转化事件类型</a>适用<br> 不同source的参数回传规则请参考： COMMON_TARGET：<a href='https://adpub.alipay.com/lark/adrlark/dxw7fkkdnhm45spm'>通用转化回传参数说明</a><br> CALLBACK： <a href='https://adpub.alipay.com/lark/adrlark/wxou6agg3z1o6wyn'>APP推广类转化回传参数说明</a>")
  
    public String getSource() {
      return source;
    }
  
  
    public void setSource(String source) {
      this.source = source;
    }
  
  
    public ConversionData targetId(String targetId) {
      
      this.targetId = targetId;
      return this;
    }
  
     /**
     * 当source&#x3D;OTHER时使用： 主体id，例如品牌id(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)
     * @return targetId
     * @deprecated
    **/
    @Deprecated
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123", value = "当source=OTHER时使用： 主体id，例如品牌id(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)")
  
    public String getTargetId() {
      return targetId;
    }
  
  
    public void setTargetId(String targetId) {
      this.targetId = targetId;
    }
  
  
    public ConversionData targetType(String targetType) {
      
      this.targetType = targetType;
      return this;
    }
  
     /**
     * 当source&#x3D;OTHER时使用：  主体类型： BRAND - 品牌 STORE - 店铺 LIVE - 直播 等等(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)
     * @return targetType
     * @deprecated
    **/
    @Deprecated
    @javax.annotation.Nullable
    @ApiModelProperty(example = "STORE", value = "当source=OTHER时使用：  主体类型： BRAND - 品牌 STORE - 店铺 LIVE - 直播 等等(接口升级，该参数已不再使用，故废弃该参数，但不影响历史数据使用。)")
  
    public String getTargetType() {
      return targetType;
    }
  
  
    public void setTargetType(String targetType) {
      this.targetType = targetType;
    }
  
  
    public ConversionData uuid(String uuid) {
      
      this.uuid = uuid;
      return this;
    }
  
     /**
     * 发生转化用户的唯一标识。 uuid_type不同，uuid传值不同：&lt;br&gt; 1. 若uuid_type&#x3D;【PID】：uuid为发生转化用户的2088id。若获取不到，可固定一个值后，上传callback_ext_info参数。&lt;br&gt; 2. 若uuid_type&#x3D;【OAID_MD5】【IDFA_MD5】【IP_UA】【CAID】【MEI】: uuid传的值为&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4&#39;&gt;监测上报&lt;/a&gt;或&lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar&#39;&gt;落地页宏替换&lt;/a&gt;配置的对应宏参下发的值&lt;br&gt; 其中当uuid_type&#x3D;IP_UA时：__IP__、__UA__宏参需用\&quot;_\&quot;拼接上传&lt;br&gt;
     * @return uuid
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "7893ybc7032173", value = "发生转化用户的唯一标识。 uuid_type不同，uuid传值不同：<br> 1. 若uuid_type=【PID】：uuid为发生转化用户的2088id。若获取不到，可固定一个值后，上传callback_ext_info参数。<br> 2. 若uuid_type=【OAID_MD5】【IDFA_MD5】【IP_UA】【CAID】【MEI】: uuid传的值为<a href='https://adpub.alipay.com/lark/adrlark/qm1v2gtpvcftele4'>监测上报</a>或<a href='https://adpub.alipay.com/lark/adrlark/gw3740rggm4n5gar'>落地页宏替换</a>配置的对应宏参下发的值<br> 其中当uuid_type=IP_UA时：__IP__、__UA__宏参需用\"_\"拼接上传<br>")
  
    public String getUuid() {
      return uuid;
    }
  
  
    public void setUuid(String uuid) {
      this.uuid = uuid;
    }
  
  
    public ConversionData uuidOpenId(String uuidOpenId) {
      
      this.uuidOpenId = uuidOpenId;
      return this;
    }
  
     /**
     * 支付宝用户在应用维度下的唯一标识
     * @return uuidOpenId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "oPXyY4O0ZTmUqSX4MRxYDDCccT6Kc9EXX", value = "支付宝用户在应用维度下的唯一标识")
  
    public String getUuidOpenId() {
      return uuidOpenId;
    }
  
  
    public void setUuidOpenId(String uuidOpenId) {
      this.uuidOpenId = uuidOpenId;
    }
  
  
    public ConversionData uuidType(String uuidType) {
      
      this.uuidType = uuidType;
      return this;
    }
  
     /**
     * &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt&#39;&gt;通用类转化事件类型：&lt;/a&gt;&lt;br&gt; uuid_type固定为PID：表示转化用户唯一标识&lt;br&gt; &lt;a href&#x3D;&#39;https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b&#39;&gt;APP推广类转化事件类型：&lt;/a&gt;&lt;br&gt; OAID_MD5：表示OAID原值MD5加密后的值&lt;br&gt; IDFA_MD5：表示IDFA原值MD5加密后的值&lt;br&gt; IP_UA：表示IP_UA拼接值，以下划线拼接&lt;br&gt; CAID：表示CAID原值&lt;br&gt; IMEI：表示IMEI原值&lt;br&gt;
     * @return uuidType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "PID", value = "<a href='https://adpub.alipay.com/lark/adrlark/rvzylhryxh37yplt'>通用类转化事件类型：</a><br> uuid_type固定为PID：表示转化用户唯一标识<br> <a href='https://adpub.alipay.com/lark/adrlark/pg4vb1c0g0u6fx7b'>APP推广类转化事件类型：</a><br> OAID_MD5：表示OAID原值MD5加密后的值<br> IDFA_MD5：表示IDFA原值MD5加密后的值<br> IP_UA：表示IP_UA拼接值，以下划线拼接<br> CAID：表示CAID原值<br> IMEI：表示IMEI原值<br>")
  
    public String getUuidType() {
      return uuidType;
    }
  
  
    public void setUuidType(String uuidType) {
      this.uuidType = uuidType;
    }
  
    /**
     * 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 ConversionData instance itself
     */
    public ConversionData 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;
      }
      ConversionData conversionData = (ConversionData) o;
      return Objects.equals(this.adId, conversionData.adId) &&
          Objects.equals(this.attributeList, conversionData.attributeList) &&
          Objects.equals(this.attributes, conversionData.attributes) &&
          Objects.equals(this.bizNo, conversionData.bizNo) &&
          Objects.equals(this.callbackExtInfo, conversionData.callbackExtInfo) &&
          Objects.equals(this.cid, conversionData.cid) &&
          Objects.equals(this.conversionAmount, conversionData.conversionAmount) &&
          Objects.equals(this.conversionId, conversionData.conversionId) &&
          Objects.equals(this.conversionTime, conversionData.conversionTime) &&
          Objects.equals(this.conversionType, conversionData.conversionType) &&
          Objects.equals(this.creativeId, conversionData.creativeId) &&
          Objects.equals(this.dataId, conversionData.dataId) &&
          Objects.equals(this.dataSrcType, conversionData.dataSrcType) &&
          Objects.equals(this.groupId, conversionData.groupId) &&
          Objects.equals(this.joinChannel, conversionData.joinChannel) &&
          Objects.equals(this.planId, conversionData.planId) &&
          Objects.equals(this.principalId, conversionData.principalId) &&
          Objects.equals(this.principalTag, conversionData.principalTag) &&
          Objects.equals(this.propertyList, conversionData.propertyList) &&
          Objects.equals(this.source, conversionData.source) &&
          Objects.equals(this.targetId, conversionData.targetId) &&
          Objects.equals(this.targetType, conversionData.targetType) &&
          Objects.equals(this.uuid, conversionData.uuid) &&
          Objects.equals(this.uuidOpenId, conversionData.uuidOpenId) &&
          Objects.equals(this.uuidType, conversionData.uuidType)&&
          Objects.equals(this.additionalProperties, conversionData.additionalProperties);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(adId, attributeList, attributes, bizNo, callbackExtInfo, cid, conversionAmount, conversionId, conversionTime, conversionType, creativeId, dataId, dataSrcType, groupId, joinChannel, planId, principalId, principalTag, propertyList, source, targetId, targetType, uuid, uuidOpenId, uuidType, additionalProperties);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class ConversionData {\n");
      sb.append("    adId: ").append(toIndentedString(adId)).append("\n");
      sb.append("    attributeList: ").append(toIndentedString(attributeList)).append("\n");
      sb.append("    attributes: ").append(toIndentedString(attributes)).append("\n");
      sb.append("    bizNo: ").append(toIndentedString(bizNo)).append("\n");
      sb.append("    callbackExtInfo: ").append(toIndentedString(callbackExtInfo)).append("\n");
      sb.append("    cid: ").append(toIndentedString(cid)).append("\n");
      sb.append("    conversionAmount: ").append(toIndentedString(conversionAmount)).append("\n");
      sb.append("    conversionId: ").append(toIndentedString(conversionId)).append("\n");
      sb.append("    conversionTime: ").append(toIndentedString(conversionTime)).append("\n");
      sb.append("    conversionType: ").append(toIndentedString(conversionType)).append("\n");
      sb.append("    creativeId: ").append(toIndentedString(creativeId)).append("\n");
      sb.append("    dataId: ").append(toIndentedString(dataId)).append("\n");
      sb.append("    dataSrcType: ").append(toIndentedString(dataSrcType)).append("\n");
      sb.append("    groupId: ").append(toIndentedString(groupId)).append("\n");
      sb.append("    joinChannel: ").append(toIndentedString(joinChannel)).append("\n");
      sb.append("    planId: ").append(toIndentedString(planId)).append("\n");
      sb.append("    principalId: ").append(toIndentedString(principalId)).append("\n");
      sb.append("    principalTag: ").append(toIndentedString(principalTag)).append("\n");
      sb.append("    propertyList: ").append(toIndentedString(propertyList)).append("\n");
      sb.append("    source: ").append(toIndentedString(source)).append("\n");
      sb.append("    targetId: ").append(toIndentedString(targetId)).append("\n");
      sb.append("    targetType: ").append(toIndentedString(targetType)).append("\n");
      sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
      sb.append("    uuidOpenId: ").append(toIndentedString(uuidOpenId)).append("\n");
      sb.append("    uuidType: ").append(toIndentedString(uuidType)).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("ad_id");
      openapiFields.add("attribute_list");
      openapiFields.add("attributes");
      openapiFields.add("biz_no");
      openapiFields.add("callback_ext_info");
      openapiFields.add("cid");
      openapiFields.add("conversion_amount");
      openapiFields.add("conversion_id");
      openapiFields.add("conversion_time");
      openapiFields.add("conversion_type");
      openapiFields.add("creative_id");
      openapiFields.add("data_id");
      openapiFields.add("data_src_type");
      openapiFields.add("group_id");
      openapiFields.add("join_channel");
      openapiFields.add("plan_id");
      openapiFields.add("principal_id");
      openapiFields.add("principal_tag");
      openapiFields.add("property_list");
      openapiFields.add("source");
      openapiFields.add("target_id");
      openapiFields.add("target_type");
      openapiFields.add("uuid");
      openapiFields.add("uuid_open_id");
      openapiFields.add("uuid_type");
  
      // 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 ConversionData
    */
    public static void validateJsonObject(JsonObject jsonObj) throws IOException {
        if (jsonObj == null) {
          if (ConversionData.openapiRequiredFields.isEmpty()) {
            return;
          } else { // has required fields
            throw new IllegalArgumentException(String.format("The required field(s) %s in ConversionData is not found in the empty JSON string", ConversionData.openapiRequiredFields.toString()));
          }
        }
        if (jsonObj.get("ad_id") != null && !jsonObj.get("ad_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `ad_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("ad_id").toString()));
        }
        JsonArray jsonArrayattributeList = jsonObj.getAsJsonArray("attribute_list");
        if (jsonArrayattributeList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("attribute_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `attribute_list` to be an array in the JSON string but got `%s`", jsonObj.get("attribute_list").toString()));
          }
  
          // validate the optional field `attribute_list` (array)
          for (int i = 0; i < jsonArrayattributeList.size(); i++) {
            ConversionProperty.validateJsonObject(jsonArrayattributeList.get(i).getAsJsonObject());
          };
        }
        // validate the optional field `attributes`
        if (jsonObj.getAsJsonObject("attributes") != null) {
          ConversionProperty.validateJsonObject(jsonObj.getAsJsonObject("attributes"));
        }
        if (jsonObj.get("biz_no") != null && !jsonObj.get("biz_no").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `biz_no` to be a primitive type in the JSON string but got `%s`", jsonObj.get("biz_no").toString()));
        }
        if (jsonObj.get("callback_ext_info") != null && !jsonObj.get("callback_ext_info").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `callback_ext_info` to be a primitive type in the JSON string but got `%s`", jsonObj.get("callback_ext_info").toString()));
        }
        if (jsonObj.get("cid") != null && !jsonObj.get("cid").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `cid` to be a primitive type in the JSON string but got `%s`", jsonObj.get("cid").toString()));
        }
        if (jsonObj.get("conversion_amount") != null && !jsonObj.get("conversion_amount").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `conversion_amount` to be a primitive type in the JSON string but got `%s`", jsonObj.get("conversion_amount").toString()));
        }
        if (jsonObj.get("conversion_id") != null && !jsonObj.get("conversion_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `conversion_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("conversion_id").toString()));
        }
        if (jsonObj.get("conversion_type") != null && !jsonObj.get("conversion_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `conversion_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("conversion_type").toString()));
        }
        if (jsonObj.get("creative_id") != null && !jsonObj.get("creative_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `creative_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("creative_id").toString()));
        }
        if (jsonObj.get("data_id") != null && !jsonObj.get("data_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `data_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("data_id").toString()));
        }
        if (jsonObj.get("data_src_type") != null && !jsonObj.get("data_src_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `data_src_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("data_src_type").toString()));
        }
        if (jsonObj.get("group_id") != null && !jsonObj.get("group_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `group_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("group_id").toString()));
        }
        if (jsonObj.get("join_channel") != null && !jsonObj.get("join_channel").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `join_channel` to be a primitive type in the JSON string but got `%s`", jsonObj.get("join_channel").toString()));
        }
        if (jsonObj.get("plan_id") != null && !jsonObj.get("plan_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `plan_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("plan_id").toString()));
        }
        if (jsonObj.get("principal_id") != null && !jsonObj.get("principal_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `principal_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("principal_id").toString()));
        }
        if (jsonObj.get("principal_tag") != null && !jsonObj.get("principal_tag").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `principal_tag` to be a primitive type in the JSON string but got `%s`", jsonObj.get("principal_tag").toString()));
        }
        JsonArray jsonArraypropertyList = jsonObj.getAsJsonArray("property_list");
        if (jsonArraypropertyList != null) {
          // ensure the json data is an array
          if (!jsonObj.get("property_list").isJsonArray()) {
            throw new IllegalArgumentException(String.format("Expected the field `property_list` to be an array in the JSON string but got `%s`", jsonObj.get("property_list").toString()));
          }
  
          // validate the optional field `property_list` (array)
          for (int i = 0; i < jsonArraypropertyList.size(); i++) {
            ConversionProperty.validateJsonObject(jsonArraypropertyList.get(i).getAsJsonObject());
          };
        }
        if (jsonObj.get("source") != null && !jsonObj.get("source").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `source` to be a primitive type in the JSON string but got `%s`", jsonObj.get("source").toString()));
        }
        if (jsonObj.get("target_id") != null && !jsonObj.get("target_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `target_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("target_id").toString()));
        }
        if (jsonObj.get("target_type") != null && !jsonObj.get("target_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `target_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("target_type").toString()));
        }
        if (jsonObj.get("uuid") != null && !jsonObj.get("uuid").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `uuid` to be a primitive type in the JSON string but got `%s`", jsonObj.get("uuid").toString()));
        }
        if (jsonObj.get("uuid_open_id") != null && !jsonObj.get("uuid_open_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `uuid_open_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("uuid_open_id").toString()));
        }
        if (jsonObj.get("uuid_type") != null && !jsonObj.get("uuid_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `uuid_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("uuid_type").toString()));
        }
    }
  
    public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
      @SuppressWarnings("unchecked")
      @Override
      public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
         if (!ConversionData.class.isAssignableFrom(type.getRawType())) {
           return null; // this class only serializes 'ConversionData' and its subtypes
         }
         final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
         final TypeAdapter<ConversionData> thisAdapter
                          = gson.getDelegateAdapter(this, TypeToken.get(ConversionData.class));
  
         return (TypeAdapter<T>) new TypeAdapter<ConversionData>() {
             @Override
             public void write(JsonWriter out, ConversionData 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 ConversionData read(JsonReader in) throws IOException {
               JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
               validateJsonObject(jsonObj);
               // store additional fields in the deserialized instance
               ConversionData 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 ConversionData given an JSON string
    *
    * @param jsonString JSON string
    * @return An instance of ConversionData
    * @throws IOException if the JSON string is invalid with respect to ConversionData
    */
    public static ConversionData fromJson(String jsonString) throws IOException {
      return JSON.getGson().fromJson(jsonString, ConversionData.class);
    }
  
   /**
    * Convert an instance of ConversionData to an JSON string
    *
    * @return JSON string
    */
    public String toJson() {
      return JSON.getGson().toJson(this);
    }
  }
  
  