Skip to content

Commit c8c6ac0

Browse files
committed
Update KotlinSerializer.kt
Add handling of null, Void and Object
1 parent d09ecbd commit c8c6ac0

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed
Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,42 @@
11
package com.github.kagkarlsson.examples.kotlin
22

33
import com.github.kagkarlsson.scheduler.serializer.Serializer
4+
import kotlinx.serialization.ExperimentalSerializationApi
45
import kotlinx.serialization.KSerializer
56
import kotlinx.serialization.json.Json
7+
import kotlinx.serialization.json.JsonElement
68
import kotlinx.serialization.serializer
9+
import java.nio.charset.Charset
710
import java.nio.charset.StandardCharsets
811

12+
@OptIn(ExperimentalSerializationApi::class)
913
class KotlinSerializer : Serializer {
10-
val CHARSET = StandardCharsets.UTF_8
14+
private val charset: Charset = StandardCharsets.UTF_8
1115

12-
override fun serialize(data: Any): ByteArray {
16+
override fun serialize(data: Any?): ByteArray {
17+
if (data == null) {
18+
return ByteArray(0)
19+
}
1320
val serializer = serializer(data.javaClass)
14-
return Json.encodeToString(serializer, data).toByteArray(CHARSET);
21+
return Json.encodeToString(serializer, data).toByteArray(charset);
1522
}
1623

17-
override fun <T : Any?> deserialize(clazz: Class<T>, serializedData: ByteArray): T {
24+
@Suppress("UNCHECKED_CAST")
25+
override fun <T : Any?> deserialize(clazz: Class<T>, serializedData: ByteArray?): T? {
26+
if (serializedData == null || clazz == Void::class.java) {
27+
return null
28+
}
29+
30+
// If we do not know the class (e.g. java.lang.Object), decode as generic JSON
31+
if (clazz == Any::class.java) {
32+
return Json.decodeFromString(JsonElement.serializer(), serializedData.decodeToString()) as T
33+
}
34+
1835
// Hackish workaround?
1936
// https://github.com/Kotlin/kotlinx.serialization/issues/1134
2037
// https://stackoverflow.com/questions/64284767/replace-jackson-with-kotlinx-serialization-in-javalin-framework/64285478#64285478
2138

2239
val deserializer = serializer(clazz) as KSerializer<T>
23-
return Json.decodeFromString(deserializer, String(serializedData, CHARSET))
40+
return Json.decodeFromString(deserializer, String(serializedData, charset))
2441
}
2542
}

0 commit comments

Comments
 (0)