我已经花了很多时间尝试编写自定义序列化程序,以在序列化过程中将Int(mysql中的TINYINT)替换为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库解决了类似的问题?
谢谢。
答案 0 :(得分:0)
这很可能是不可能的:( 我找到的唯一解决方案:
使用“ BooleanWraper”而不是布尔值
@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
)