fkrauthan
01/17/2021, 10:19 PMclass ValueSerializer <T> (private val dataSerializer: KSerializer<T>) : KSerializer<Value<T>> {
override val descriptor: SerialDescriptor = dataSerializer.descriptor
override fun serialize(encoder: Encoder, value: Value<T>) {
if (value.isSet) {
if (value.value == null) {
encoder.encodeNull()
} else {
dataSerializer.serialize(encoder, value.value!!)
}
}
}
override fun deserialize(decoder: Decoder) = TODO("Not implemented!")
}
that produces invalid JSON like this: {"value1":"Hello World","value2":,"value3":null}
(see value2
node)
But when I have a custom class serializer like this
class ValueClassSerializer <T : Any> (private val dataSerializer: KSerializer<T>) : JsonTransformingSerializer<T>(dataSerializer) {
override fun transformSerialize(element: JsonElement): JsonElement =
element.jsonObject
}
and call println(Json.encodeToString(ValueClassSerializer(TestClass.serializer()), testObject))
the output removes correctly the value2
node