diff options
Diffstat (limited to 'guide/example/example-serializer-19.kt')
-rw-r--r-- | guide/example/example-serializer-19.kt | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/guide/example/example-serializer-19.kt b/guide/example/example-serializer-19.kt index da51db3e..4622665a 100644 --- a/guide/example/example-serializer-19.kt +++ b/guide/example/example-serializer-19.kt @@ -6,30 +6,21 @@ import kotlinx.serialization.json.* import kotlinx.serialization.encoding.* import kotlinx.serialization.descriptors.* -import kotlinx.serialization.modules.* -import java.util.Date -import java.text.SimpleDateFormat - -object DateAsLongSerializer : KSerializer<Date> { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Date", PrimitiveKind.LONG) - override fun serialize(encoder: Encoder, value: Date) = encoder.encodeLong(value.time) - override fun deserialize(decoder: Decoder): Date = Date(decoder.decodeLong()) -} - -@Serializable -class ProgrammingLanguage( - val name: String, - @Contextual - val stableReleaseDate: Date -) +@Serializable(with = BoxSerializer::class) +data class Box<T>(val contents: T) -private val module = SerializersModule { - contextual(DateAsLongSerializer) +class BoxSerializer<T>(private val dataSerializer: KSerializer<T>) : KSerializer<Box<T>> { + override val descriptor: SerialDescriptor = dataSerializer.descriptor + override fun serialize(encoder: Encoder, value: Box<T>) = dataSerializer.serialize(encoder, value.contents) + override fun deserialize(decoder: Decoder) = Box(dataSerializer.deserialize(decoder)) } -val format = Json { serializersModule = module } +@Serializable +data class Project(val name: String) fun main() { - val data = ProgrammingLanguage("Kotlin", SimpleDateFormat("yyyy-MM-ddX").parse("2016-02-15+00")) - println(format.encodeToString(data)) + val box = Box(Project("kotlinx.serialization")) + val string = Json.encodeToString(box) + println(string) + println(Json.decodeFromString<Box<Project>>(string)) } |