如何在 Ktor 中 serialize/deserialize 枚举 in/from 一个小写字母?
How to serialize/deserialize enums in/from a lower case in Ktor?
我在我的应用中使用Ktor序列化,下面是build.gradle中的依赖:
dependencies {
// ...
implementation "io.ktor:ktor-serialization:$ktor_version"
}
并设置在Application.kt:
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@Suppress("unused")
fun Application.module(@Suppress("UNUSED_PARAMETER") testing: Boolean = false) {
// ...
install(ContentNegotiation) {
json(Json {
prettyPrint = true
})
}
// ...
}
一切正常,但枚举...例如,我有下一个:
enum class EGender(val id: Int) {
FEMALE(1),
MALE(2);
companion object {
fun valueOf(value: Int) = values().find { it.id == value }
}
}
如果我将序列化这个枚举实例,Ktor 将输出如下内容:
{
"gender": "MALE"
}
如何在不重命名枚举成员的情况下使其变为小写?
P.S. 我也无法将 Int
更改为 String
类型,因为它代表数据库 ID。
您可以为枚举常量添加 SerialName 注释以覆盖 JSON 中的名称:
@kotlinx.serialization.Serializable
enum class EGender(val id: Int) {
@SerialName("female")
FEMALE(1),
@SerialName("male")
MALE(2);
companion object {
fun valueOf(value: Int) = values().find { it.id == value }
}
}
我在我的应用中使用Ktor序列化,下面是build.gradle中的依赖:
dependencies {
// ...
implementation "io.ktor:ktor-serialization:$ktor_version"
}
并设置在Application.kt:
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@Suppress("unused")
fun Application.module(@Suppress("UNUSED_PARAMETER") testing: Boolean = false) {
// ...
install(ContentNegotiation) {
json(Json {
prettyPrint = true
})
}
// ...
}
一切正常,但枚举...例如,我有下一个:
enum class EGender(val id: Int) {
FEMALE(1),
MALE(2);
companion object {
fun valueOf(value: Int) = values().find { it.id == value }
}
}
如果我将序列化这个枚举实例,Ktor 将输出如下内容:
{
"gender": "MALE"
}
如何在不重命名枚举成员的情况下使其变为小写?
P.S. 我也无法将 Int
更改为 String
类型,因为它代表数据库 ID。
您可以为枚举常量添加 SerialName 注释以覆盖 JSON 中的名称:
@kotlinx.serialization.Serializable
enum class EGender(val id: Int) {
@SerialName("female")
FEMALE(1),
@SerialName("male")
MALE(2);
companion object {
fun valueOf(value: Int) = values().find { it.id == value }
}
}