Search code examples
kotlin-jskotlinx.serialization

Serialize generic class using kotlinix.serialization in Kotlin/JS fails


Serializing a generic class with kotlinx.serialization succeeds in JVM but fails in JavaScript with message TypeError: tmp$.serializer is not a function. Please, see the following Unit Test.

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlin.test.Test

@Serializable
data class SerializationTest<T>(val myValue: T)

@Serializable
data class A(val st : SerializationTest<Int>)

class SerializationTests {
    @Test
    fun serializeWithKotlinx() {
        // Succeeds in JVM but throws in JavaScript with "TypeError: tmp$.serializer is not a function"
        Json.encodeToString(SerializationTest(3))
    }

    @Test
    fun serializeWithKotlinxWithBox() {
        // Succeeds always
        Json.encodeToString(A(SerializationTest(3))) 
    }
}

How can I serialize a generic class in JavaScript?


Solution

  • As per this GitHub issue:

    Unfortunately, this is a known problem and we do not support JS legacy anymore. Please use IR backend if possible

    With JS IR it works well, giving the same results as JVM.