kotlin kontlinx中的多态值,序列化可管理吗?

qlfbtfca  于 2023-08-06  发布在  Kotlin
关注(0)|答案(1)|浏览(132)

是否可以处理一个可以像这样改变其属性类型的json:

{
   "someValue": 123
}

字符串
和/或

{
   "someValue": "123"
}


一个@Serializable对象Any是不可序列化的,所以我正在寻找一些中间转换器,它可以将值统一为相同的类型(例如123.toString()来保存两个字符串)。

x6yk4ghg

x6yk4ghg1#

如果你想得到someValue: Int,在这两种情况下,默认情况下都会解析得很好。
如果它应该是String,你可以使用isLenient选项来使它工作:
删除JSON规范限制(RFC-4627),并使解析器对格式错误的输入更加自由。在宽松模式下,允许使用带引号的布尔文本和不带引号的字符串文本。

val json = Json {
    isLenient = true
}

字符串
如果你不能同时使用这两个,例如:如果你想对所有其他的类有严格的规则,那么你可以构建你自己的类,例如。解析int并返回string:

@Serializable
@JvmInline
value class StringSerializableFromInt(private val intValue: Int) {
    val value get() = intValue.toString()
}


或者只是为更复杂的逻辑构建一个自定义序列化器-查看文档中关于构建自定义序列化器的更多信息。

相关问题