如何解决Kotlin:将嵌套的JSON对象转换为文字字符串
我有一个数据类,该数据类的属性是另一个数据类,如下所示:
@Serializable
data class Vehicle (
val color: String,val miles: Int,val year: Int,val garage: Garage
)
@Serializable
data class Garage (
val latitude: Float,val longitude: Float,val name: String
)
序列化后,它会产生如下输出:
{
"color" : "black","miles" : 35000,"year" : 2017,"garage" : { "latitude" : 43.478342,"longitude" : -91.337000,"name" : "Paul's Garage" }
}
不过,我希望garage
是其JSON表示形式的文字字符串,而不是实际的JSON对象。换句话说,所需的输出是:
{
"color" : "black","garage" : "{ \"latitude\" : 43.478342,\"longitude\" : -91.337000,\"name\" : \"Paul's Garage\" }"
}
如何在Kotlin中完成此任务?可以只用kotlinx.serialization
来完成吗,还是杰克逊/格森绝对必要?
请注意,此输出用于特定用途。我无法覆盖基本的序列化程序,因为我仍然需要从常规JSON进行序列化/反序列化(第一个示例)。换句话说,最好的情况是将第一个JSON样本转换为第二个JSON样本,而不必让数据类直接生成第二个样本。
谢谢!
解决方法
为True
创建自定义SerializationStrategy
,如下所示:
Vehicle
然后将其传递给val vehicleStrategy = object : SerializationStrategy<Vehicle> {
override val descriptor: SerialDescriptor
get() = buildClassSerialDescriptor("Vehicle") {
element<String>("color")
element<Int>("miles")
element<Int>("year")
element<String>("garage")
}
override fun serialize(encoder: Encoder,value: Vehicle) {
encoder.encodeStructure(descriptor) {
encodeStringElement(descriptor,value.color)
encodeIntElement(descriptor,1,value.miles)
encodeIntElement(descriptor,2,value.year)
encodeStringElement(descriptor,3,Json.encodeToString(value.garage))
}
}
}
:
Json.encodeToString()
结果:
val string = Json.encodeToString(vehicleStrategy,vehicle)
更多信息here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。