From fec46a8e86b484106370b6b3e87d02bb4c8f02aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jirka=20Hut=C3=A1rek?= Date: Tue, 27 Aug 2024 19:16:33 +0200 Subject: [PATCH] Configure JSON serializer to encode properties with default values, and make it more lenient --- .../main/kotlin/dev/hotwire/strada/JsonExtensions.kt | 9 ++++++++- .../kotlin/dev/hotwire/strada/StradaJsonConverter.kt | 12 +++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/strada/src/main/kotlin/dev/hotwire/strada/JsonExtensions.kt b/strada/src/main/kotlin/dev/hotwire/strada/JsonExtensions.kt index e70c50a..4546a52 100644 --- a/strada/src/main/kotlin/dev/hotwire/strada/JsonExtensions.kt +++ b/strada/src/main/kotlin/dev/hotwire/strada/JsonExtensions.kt @@ -1,5 +1,6 @@ package dev.hotwire.strada +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json @@ -27,4 +28,10 @@ internal inline fun String.decode(): T? = try { null } -private val json = Json { ignoreUnknownKeys = true } +@OptIn(ExperimentalSerializationApi::class) +private val json = Json { + ignoreUnknownKeys = true + encodeDefaults = true + explicitNulls = false + isLenient = true +} diff --git a/strada/src/main/kotlin/dev/hotwire/strada/StradaJsonConverter.kt b/strada/src/main/kotlin/dev/hotwire/strada/StradaJsonConverter.kt index 278dbb9..8b822ea 100644 --- a/strada/src/main/kotlin/dev/hotwire/strada/StradaJsonConverter.kt +++ b/strada/src/main/kotlin/dev/hotwire/strada/StradaJsonConverter.kt @@ -1,9 +1,9 @@ package dev.hotwire.strada +import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import java.lang.Exception abstract class StradaJsonConverter { companion object { @@ -42,12 +42,18 @@ abstract class StradaJsonTypeConverter : StradaJsonConverter() { } class KotlinXJsonConverter : StradaJsonConverter() { - val json = Json { ignoreUnknownKeys = true } + @OptIn(ExperimentalSerializationApi::class) + val json = Json { + ignoreUnknownKeys = true + encodeDefaults = true + explicitNulls = false + isLenient = true + } inline fun toObject(jsonData: String): T? { return try { json.decodeFromString(jsonData) - } catch(e: Exception) { + } catch (e: Exception) { logException(e) null }