Как сериализовать класс данных Kotlin со значениями по умолчанию в JSON с помощью kotlinx.сериализация?

#json #kotlin #serialization #kotlinx.serialization

Вопрос:

Существует пример класса со значением по умолчанию:

 @Serializable
data class TestClass(
    val obligatory: String,
    val optional: Int = 0
)
 

Его можно правильно десериализовать из json, таких как: { "obligatory":"text", "optional":1 } и { "obligatory":"text" } .
В то же время результат его сериализации должен содержать атрибут «необязательно».

В результате сериализации:

 Json.encodeToString(TestClass("text"))
 

Я ожидаю { "obligatory":"text", "optional":0 } , однако теперь у меня есть { "obligatory":"text" } .

Как я должен изменить свой код, чтобы достичь ожидаемого результата?

Ответ №1:

По умолчанию сериализация Kotlinx не кодирует значения по умолчанию. Я предполагаю, что это предполагает, что вы используете ту же модель данных на другой стороне.

Вы можете принудительно сериализовать значения по умолчанию при настройке сериализатора:

 val json = Json { encodeDefaults = true }

json.encodeToString(TestClass("text"))