diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java
index 72646d58cd7a8cc957cfe607e7ac990ce55c18ad..0ceba7756097e162ce0b4eed456be1db99bccf57 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java
@@ -20,14 +20,7 @@ package org.openapitools.codegen.languages;
 import static java.util.Collections.sort;
 
 import org.apache.commons.lang3.StringUtils;
-import org.openapitools.codegen.CliOption;
-import org.openapitools.codegen.CodegenConstants;
-import org.openapitools.codegen.CodegenModel;
-import org.openapitools.codegen.CodegenOperation;
-import org.openapitools.codegen.CodegenParameter;
-import org.openapitools.codegen.CodegenProperty;
-import org.openapitools.codegen.CodegenType;
-import org.openapitools.codegen.SupportingFile;
+import org.openapitools.codegen.*;
 import org.openapitools.codegen.meta.features.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,6 +55,7 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
     public static final String COLLECTION_TYPE = "collectionType";
 
     protected static final String VENDOR_EXTENSION_BASE_NAME_LITERAL = "x-base-name-literal";
+    protected static final String VENDOR_EXTENSION_DISCRIMINATOR_BASE_NAME_LITERAL = "x-base-name-discriminator-literal";
 
     protected String dateLibrary = DateLibrary.JAVA8.value;
     protected String requestDateConverter = RequestDateConverter.TO_JSON.value;
@@ -618,6 +612,11 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen {
             for (CodegenProperty var : vars) {
                 var.vendorExtensions.put(VENDOR_EXTENSION_BASE_NAME_LITERAL, var.baseName.replace("$", "\\$"));
             }
+
+            CodegenDiscriminator discriminator = cm.getDiscriminator();
+            if(discriminator != null) {
+                cm.vendorExtensions.put(VENDOR_EXTENSION_DISCRIMINATOR_BASE_NAME_LITERAL, discriminator.getPropertyBaseName().replace("$", "\\$"));
+            }
         }
 
         return objects;
diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache
index 1f58112db538cc4b3afae489ba426eb31377435f..ae0eab921c199725c9baf2871f0f56bd3bbef496 100644
--- a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache
+++ b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache
@@ -20,6 +20,9 @@ buildscript {
     {{#useRxJava3}}
     ext.rxJava3Version = '3.0.10'
     {{/useRxJava3}}
+    {{#moshi}}
+    ext.moshiVersion = '1.11.0'
+    {{/moshi}}
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -56,12 +59,13 @@ dependencies {
     {{#moshi}}
     {{^moshiCodeGen}}
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
     {{/moshiCodeGen}}
     {{#moshiCodeGen}}
-    compile "com.squareup.moshi:moshi:1.11.0"
-    kapt "com.squareup.moshi:moshi-kotlin-codegen:1.11.0"
+    compile "com.squareup.moshi:moshi:$moshiVersion"
+    kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion"
     {{/moshiCodeGen}}
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     {{/moshi}}
     {{#gson}}
     compile "com.google.code.gson:gson:2.8.6"
diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache
index 117cdef8fd790c47f1f3fb755ed0a58d685bde0c..bffffc8db9594e7fbd5d4a757c9eb5d42152f44d 100644
--- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache
+++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache
@@ -45,7 +45,7 @@ import java.io.Serializable
 {{#parcelizeModels}}
 @Parcelize
 {{/parcelizeModels}}
-{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
+{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{^discriminator}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/discriminator}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
 {{#isDeprecated}}
 @Deprecated(message = "This schema is deprecated.")
 {{/isDeprecated}}
diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache
index 6d23fb240a0ca0e327c6a0b30ae74d439815dbb5..298d88ddea044256d44b53239d04721205fc68a2 100644
--- a/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache
+++ b/modules/openapi-generator/src/main/resources/kotlin-client/interface_opt_var.mustache
@@ -3,7 +3,7 @@
 {{/description}}
     {{^multiplatform}}
     {{#moshi}}
-    @Json(name = "{{{vendorExtensions.x-base-name-literal}}}")
+    {{^discriminator}}@Json(name = "{{{vendorExtensions.x-base-name-literal}}}"){{/discriminator}}
     {{/moshi}}
     {{#gson}}
     @get:SerializedName("{{{vendorExtensions.x-base-name-literal}}}")
diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache
index beef3fc2bf380b36bacd1330ac29d9c78b217828..b517936da1e919305a3a0da5c3eeff179114c109 100644
--- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache
+++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache
@@ -2,6 +2,7 @@ package {{packageName}}.infrastructure
 
 {{#moshi}}
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 {{^moshiCodeGen}}
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 {{/moshiCodeGen}}
@@ -51,6 +52,10 @@ import java.util.concurrent.atomic.AtomicInteger
 import java.util.concurrent.atomic.AtomicLong
 {{/kotlinx_serialization}}
 
+{{#moshi}}
+import {{modelPackage}}.*
+{{/moshi}}
+
 {{#nonPublicApi}}internal {{/nonPublicApi}}object Serializer {
 {{#moshi}}
     @JvmStatic
@@ -60,11 +65,16 @@ import java.util.concurrent.atomic.AtomicLong
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
+        .add(BigDecimalAdapter())
+        .add(BigIntegerAdapter())
         {{^moshiCodeGen}}
         .add(KotlinJsonAdapterFactory())
         {{/moshiCodeGen}}
-        .add(BigDecimalAdapter())
-        .add(BigIntegerAdapter())
+        {{#models}}{{#model}}{{#discriminator}}.add(PolymorphicJsonAdapterFactory.of({{classname}}::class.java, "{{{vendorExtensions.x-base-name-discriminator-literal}}}")
+        {{#mappedModels}}
+            .withSubtype({{modelName}}::class.java, "{{mappingName}}")
+        {{/mappedModels}}
+        ){{/discriminator}}{{/model}}{{/models}}
 
     @JvmStatic
     val moshi: Moshi by lazy {
@@ -78,7 +88,7 @@ import java.util.concurrent.atomic.AtomicLong
         .registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
         .registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
         .registerTypeAdapter(ByteArray::class.java, ByteArrayAdapter())
-    
+
     @JvmStatic
     val gson: Gson by lazy {
         gsonBuilder.create()
diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index b80e0390de2d33aa5140c42df6455bdb4b909042..4603b266960ed76cb1b2360d0230dd3e75ddf5e8 100644
--- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -8,6 +8,7 @@ import java.time.OffsetDateTime
 import java.util.UUID
 import java.util.Date
 
+
 object Serializer {
     @JvmStatic
     val gsonBuilder: GsonBuilder = GsonBuilder()
@@ -15,7 +16,7 @@ object Serializer {
         .registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
         .registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
         .registerTypeAdapter(ByteArray::class.java, ByteArrayAdapter())
-    
+
     @JvmStatic
     val gson: Gson by lazy {
         gsonBuilder.create()
diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index ec931412660718971e91388c6a3853c3aec84609..20bbc3a1333061000940d909516437f4f065f81f 100644
--- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonInclude
 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
 import java.util.Date
 
+
 object Serializer {
     @JvmStatic
     val jacksonObjectMapper: ObjectMapper = jacksonObjectMapper()
diff --git a/samples/client/petstore/kotlin-json-request-string/build.gradle b/samples/client/petstore/kotlin-json-request-string/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin-json-request-string/build.gradle
+++ b/samples/client/petstore/kotlin-json-request-string/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index b80e0390de2d33aa5140c42df6455bdb4b909042..4603b266960ed76cb1b2360d0230dd3e75ddf5e8 100644
--- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -8,6 +8,7 @@ import java.time.OffsetDateTime
 import java.util.UUID
 import java.util.Date
 
+
 object Serializer {
     @JvmStatic
     val gsonBuilder: GsonBuilder = GsonBuilder()
@@ -15,7 +16,7 @@ object Serializer {
         .registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter())
         .registerTypeAdapter(LocalDate::class.java, LocalDateAdapter())
         .registerTypeAdapter(ByteArray::class.java, ByteArrayAdapter())
-    
+
     @JvmStatic
     val gson: Gson by lazy {
         gsonBuilder.create()
diff --git a/samples/client/petstore/kotlin-moshi-codegen/build.gradle b/samples/client/petstore/kotlin-moshi-codegen/build.gradle
index 5e86b0b1a36277acc8ceaaf9195260a907caf2b3..1fc6265e462a2b0794909de3cb0db93934b83f4a 100644
--- a/samples/client/petstore/kotlin-moshi-codegen/build.gradle
+++ b/samples/client/petstore/kotlin-moshi-codegen/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,8 +31,9 @@ test {
 
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
-    compile "com.squareup.moshi:moshi:1.11.0"
-    kapt "com.squareup.moshi:moshi-kotlin-codegen:1.11.0"
+    compile "com.squareup.moshi:moshi:$moshiVersion"
+    kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 1ac7a1908fa63ad3633812dc09f2b9ce79bdc875..6c52e560160776956d7d4601d7fd9ab121e1e38a 100644
--- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,8 +1,11 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -13,6 +16,7 @@ object Serializer {
         .add(ByteArrayAdapter())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-nonpublic/build.gradle b/samples/client/petstore/kotlin-nonpublic/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin-nonpublic/build.gradle
+++ b/samples/client/petstore/kotlin-nonpublic/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 54e21400c43fe0769c3c6a60221c679e1d75bb98..de8a4ce2117452a932c0236d77166a3a6c7c3fbc 100644
--- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 internal object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ internal object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-nullable/build.gradle b/samples/client/petstore/kotlin-nullable/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin-nullable/build.gradle
+++ b/samples/client/petstore/kotlin-nullable/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-okhttp3/build.gradle b/samples/client/petstore/kotlin-okhttp3/build.gradle
index 1da4409df35fad64697c81cec4d7c0c93e76fae9..6bdf65f4c7e183c6d1530b4bda3d237acd509662 100644
--- a/samples/client/petstore/kotlin-okhttp3/build.gradle
+++ b/samples/client/petstore/kotlin-okhttp3/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:3.12.13"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 624053c30742c9a6942928016a2731754bba0fad..35b4d1ce41d6b8df18df261e15a73073506e0bcc 100644
--- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -15,6 +15,7 @@ import java.util.concurrent.atomic.AtomicBoolean
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.concurrent.atomic.AtomicLong
 
+
 object Serializer {
     @JvmStatic
     val kotlinSerializationAdapters = SerializersModule {
diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle
index b55dfb35245f84edb324a23d2402fd599af8bc05..f9da2bd483f06b97c0eedd91013977b2734139f6 100644
--- a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle
+++ b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle
@@ -10,6 +10,7 @@ buildscript {
     ext.kotlin_version = '1.4.30'
     ext.retrofitVersion = '2.7.2'
     ext.rxJava3Version = '3.0.10'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -32,7 +33,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0"
     compile "com.squareup.okhttp3:logging-interceptor:4.9.0"
     compile "io.reactivex.rxjava3:rxjava:$rxJava3Version"
diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-retrofit2/build.gradle b/samples/client/petstore/kotlin-retrofit2/build.gradle
index 109eb2ca069f5f5257fd46ef23fc7ee3c25f1e2e..68dacc2360a7fbceeb43c7c2fbea9d45860db09e 100644
--- a/samples/client/petstore/kotlin-retrofit2/build.gradle
+++ b/samples/client/petstore/kotlin-retrofit2/build.gradle
@@ -9,6 +9,7 @@ wrapper {
 buildscript {
     ext.kotlin_version = '1.4.30'
     ext.retrofitVersion = '2.7.2'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -31,7 +32,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0"
     compile "com.squareup.okhttp3:logging-interceptor:4.9.0"
     compile "com.squareup.retrofit2:retrofit:$retrofitVersion"
diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-string/build.gradle b/samples/client/petstore/kotlin-string/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin-string/build.gradle
+++ b/samples/client/petstore/kotlin-string/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-threetenbp/build.gradle b/samples/client/petstore/kotlin-threetenbp/build.gradle
index 87605daa9d22ace0baf820cf948d0a7a29b8d3fa..9623adba5f99c88e6c59863069df44904e43ab6a 100644
--- a/samples/client/petstore/kotlin-threetenbp/build.gradle
+++ b/samples/client/petstore/kotlin-threetenbp/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     compile "org.threeten:threetenbp:1.5.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin-uppercase-enum/build.gradle b/samples/client/petstore/kotlin-uppercase-enum/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin-uppercase-enum/build.gradle
+++ b/samples/client/petstore/kotlin-uppercase-enum/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..0bccf02ff4e12dfe596721925a57bafc41a2aa94 100644
--- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,9 +1,12 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
 
+import org.openapitools.client.models.*
+
 object Serializer {
     @JvmStatic
     val moshiBuilder: Moshi.Builder = Moshi.Builder()
@@ -12,9 +15,10 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
-        .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())
+        .add(KotlinJsonAdapterFactory())
+        
 
     @JvmStatic
     val moshi: Moshi by lazy {
diff --git a/samples/client/petstore/kotlin/build.gradle b/samples/client/petstore/kotlin/build.gradle
index 60e5056e03163b56773e5305d94d70148f8fa6cd..34d16649ec0edd45e7c85eb483568da15d03ba41 100644
--- a/samples/client/petstore/kotlin/build.gradle
+++ b/samples/client/petstore/kotlin/build.gradle
@@ -8,6 +8,7 @@ wrapper {
 
 buildscript {
     ext.kotlin_version = '1.4.30'
+    ext.moshiVersion = '1.11.0'
 
     repositories {
         maven { url "https://repo1.maven.org/maven2" }
@@ -30,7 +31,8 @@ test {
 dependencies {
     compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
     compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
-    compile "com.squareup.moshi:moshi-kotlin:1.11.0"
+    compile "com.squareup.moshi:moshi-kotlin:$moshiVersion"
+    compile "com.squareup.moshi:moshi-adapters:$moshiVersion"
     compile "com.squareup.okhttp3:okhttp:4.9.0"
     testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2"
 }
diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
index 3d0a6c32566a552afd66096c3317bf3e718b7e8c..d0e9c21280501479c2d0fe99fcc5464b86be28af 100644
--- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
+++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt
@@ -1,8 +1,10 @@
 package org.openapitools.client.infrastructure
 
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
 import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import java.util.Date
+import org.openapitools.client.models.*
 
 object Serializer {
     @JvmStatic
@@ -12,6 +14,7 @@ object Serializer {
         .add(LocalDateAdapter())
         .add(UUIDAdapter())
         .add(ByteArrayAdapter())
+        
         .add(KotlinJsonAdapterFactory())
         .add(BigDecimalAdapter())
         .add(BigIntegerAdapter())