kotlinx.serialization конвертировать Int в логическое значение с помощью специального сериализатора
Я уже потратил много времени, пытаясь написать собственный сериализатор, чтобы заменить Int (TINYINT from mysql) на Boolean во время сериализации.
С помощью Gson я делаю это без проблем, что-то вроде этого (Java):
public class BooleanSerializer implements JsonSerializer<Boolean>, JsonDeserializer<Boolean> {
@Override
public JsonElement serialize(Boolean arg0, Type arg1, JsonSerializationContext arg2) {
return new JsonPrimitive(arg0 ? 1 : 0);
}
@Override
public Boolean deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
return arg0.getAsInt() == 1;
}
}
GsonBuilder().registerTypeAdapter(Boolean.class, serializer)
Может быть, кто-то уже решил подобную проблему с помощью библиотеки kotlinx.serialization?
Спасибо.
1 ответ
Скорее всего, это невозможно:(единственное решение, которое я нашел:
- создание кастома "BooleanWraper"
- переопределить методы сериализатора "сохранить" и "загрузить"
используйте "BooleanWraper" вместо Boolean
@Serializable data class BooleanWraper(val value: Boolean){ @Serializer(forClass = BooleanWraper::class) companion object : KSerializer<BooleanWraper> { override fun save(output: KOutput, obj: BooleanWraper) = output.writeIntValue(if (obj.value) 1 else 0) override fun load(input: KInput): BooleanWraper= BooleanWraper(input.readNullable(IntSerializer) == 1) }
}
Используя обертку:
@Serializable
data class Example(
@SerialName("my_bool") val myBool: BooleanWraper
)