diff --git a/core/jvmMain/src/kotlinx/serialization/SerializersJvm.kt b/core/jvmMain/src/kotlinx/serialization/SerializersJvm.kt index b4aa980ff..633836d35 100644 --- a/core/jvmMain/src/kotlinx/serialization/SerializersJvm.kt +++ b/core/jvmMain/src/kotlinx/serialization/SerializersJvm.kt @@ -124,13 +124,13 @@ private fun SerializersModule.serializerByJavaTypeImpl(type: Type, failOnMissing @OptIn(ExperimentalSerializationApi::class) private fun SerializersModule.typeSerializer(type: Class<*>, failOnMissingTypeArgSerializer: Boolean): KSerializer? { - return if (!type.isArray) { - reflectiveOrContextual(type.kotlin as KClass, emptyList()) - } else { + return if (type.isArray && !type.componentType.isPrimitive) { val eType: Class<*> = type.componentType val s = if (failOnMissingTypeArgSerializer) serializer(eType) else (serializerOrNull(eType) ?: return null) val arraySerializer = ArraySerializer(eType.kotlin as KClass, s) arraySerializer as KSerializer + } else { + reflectiveOrContextual(type.kotlin as KClass, emptyList()) } } diff --git a/formats/json/jvmTest/src/kotlinx/serialization/features/SerializerByTypeTest.kt b/formats/json/jvmTest/src/kotlinx/serialization/features/SerializerByTypeTest.kt index f5421be04..509c9e0c5 100644 --- a/formats/json/jvmTest/src/kotlinx/serialization/features/SerializerByTypeTest.kt +++ b/formats/json/jvmTest/src/kotlinx/serialization/features/SerializerByTypeTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.serialization.features @@ -93,6 +93,15 @@ class SerializerByTypeTest { assertSerializedWithType(token, """["a","b","c"]""", myArr) } + @Test + fun testPrimitiveArrayResolving() { + val myArr = intArrayOf(1, 2, 3) + val token = IntArray::class.java + val name = serializer(token).descriptor.serialName + assertTrue(name.contains("IntArray")) + assertSerializedWithType(token, """[1,2,3]""", myArr) + } + @Test fun testReifiedListResolving() { val myList = listOf("a", "b", "c")