Narek Mailian
09/21/2021, 4:58 PM@Serializable
data class ProjectIdWrapper(
val id: ProjectId,
val item: Project)
@Serializable
data class Project(
val projectProperty1: String,
val projectProperty2: String
)
but I want to have ProjectIdWrapper serialized/deserialized as
{
"id": 12121,
"projectProperty1": "AAA",
"projectProperty2": "BBB"
}
Is this possible? Or even better, can the IdWrapper be made generic? 😊sushma nayak
09/21/2021, 5:37 PMephemient
09/22/2021, 5:17 AMephemient
09/22/2021, 5:24 AM@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 aroundNarek Mailian
09/23/2021, 6:36 AM