umm so I have this thing ```@Serializable data cla...
# serialization
n
umm so I have this thing
Copy code
@Serializable
data class ProjectIdWrapper(
	val id: ProjectId,
	val item: Project)
Copy code
@Serializable
data class Project(
	val projectProperty1: String,
	val projectProperty2: String
)
but I want to have ProjectIdWrapper serialized/deserialized as
Copy code
{
  "id": 12121,
  "projectProperty1": "AAA",
  "projectProperty2": "BBB"
}
Is this possible? Or even better, can the IdWrapper be made generic? 😊
s
Definitely possible.. one of the ways is to use a custom serializer.
for now you will have to write a custom serializer to achive that result. I would recommend https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#composite-serializer-via-surrogate :
Copy code
@Serializable
private class ProjectIdWrapperSurrogate(
    val id: ProjectId,
    val projectProperty1: String,
    val projectProperty2: String
)
object ProjectIdWrapperSerializer : KSerializer<ProjectIdWrapper> {
    override val descriptor = ProjectIdWrapperSurrogate.serializer().descriptor
    override fun serialize(encoder: Encoder, value: ProjectIdWrapper) {
        encoder.encodeSerializableValue(
            ProjectIdWrapperSurrogate.serializer(),
            ProjectIdWrapperSurrogate(
                value.id,
                value.project.projectProperty1,
                value.project.projectProperty2
            )
        )
    }
    override fun deserialize(decoder: Decoder): ProjectIdWrapper {
        val surrogate = decoder.decodeSerializableValue(ProjectIdWrapperSurrogate.serializer())
        return ProjectIdWrapper(
            id = surrogate.id,
            project = Project(
                projectProperty1 = surrogate.projectProperty1,
                projectProperty2 = surrogate.projectProperty2
            )
        )
    }
}
of course you could also use https://kotlin.github.io/kotlinx.serialization/kotlinx-serialization-json/kotlinx-serialization-json/kotlinx.serialization.json/-json-transforming-serializer/index.html instead, and just move keys around
👍 1
n
Thanks a lot! I'll try it