是否可以处理一个可以像这样改变其属性类型的json:
{ "someValue": 123 }
字符串和/或
{ "someValue": "123" }
型一个@Serializable对象Any是不可序列化的,所以我正在寻找一些中间转换器,它可以将值统一为相同的类型(例如123.toString()来保存两个字符串)。
@Serializable
x6yk4ghg1#
如果你想得到someValue: Int,在这两种情况下,默认情况下都会解析得很好。如果它应该是String,你可以使用isLenient选项来使它工作:删除JSON规范限制(RFC-4627),并使解析器对格式错误的输入更加自由。在宽松模式下,允许使用带引号的布尔文本和不带引号的字符串文本。
someValue: Int
String
isLenient
val json = Json { isLenient = true }
字符串如果你不能同时使用这两个,例如:如果你想对所有其他的类有严格的规则,那么你可以构建你自己的类,例如。解析int并返回string:
@Serializable @JvmInline value class StringSerializableFromInt(private val intValue: Int) { val value get() = intValue.toString() }
型或者只是为更复杂的逻辑构建一个自定义序列化器-查看文档中关于构建自定义序列化器的更多信息。
1条答案
按热度按时间x6yk4ghg1#
如果你想得到
someValue: Int
,在这两种情况下,默认情况下都会解析得很好。如果它应该是
String
,你可以使用isLenient
选项来使它工作:删除JSON规范限制(RFC-4627),并使解析器对格式错误的输入更加自由。在宽松模式下,允许使用带引号的布尔文本和不带引号的字符串文本。
字符串
如果你不能同时使用这两个,例如:如果你想对所有其他的类有严格的规则,那么你可以构建你自己的类,例如。解析int并返回string:
型
或者只是为更复杂的逻辑构建一个自定义序列化器-查看文档中关于构建自定义序列化器的更多信息。