Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Kotlin嵌套类序列化为平面JSON_Json_Kotlin_Serialization - Fatal编程技术网

将Kotlin嵌套类序列化为平面JSON

将Kotlin嵌套类序列化为平面JSON,json,kotlin,serialization,Json,Kotlin,Serialization,我正在寻找一种标准化的方法,在JVM上使用kotlinx.serialization将Kotlin对象序列化为只包含键->值对的“平面”Json 例如: @Serializable data class Address(val street: String, val postalCode: String) @Serializable data class Customer(val id: String, val name: String, val address: Address) 序列化时

我正在寻找一种标准化的方法,在JVM上使用kotlinx.serialization将Kotlin对象序列化为只包含键->值对的“平面”Json

例如:

@Serializable
data class Address(val street: String, val postalCode: String)

@Serializable
data class Customer(val id: String, val name: String, val address: Address)
序列化时的默认行为是:

{
    "id": "123ABC",
    "name": "Joe"
    "address": {
        "street": "my street",
        "postalCode": "123456"
    }
}
我想要的是:

{
    "id": "123ABC",
    "name": "Joe"
    "street": "my street",
    "postalCode": "123456"
}
我找不到一个方法来完成这项工作。因此,我非常确定我必须实现一个定制的
KSerializer
,但目前不知道如何实现行为。

这可以通过以下技术实现:

import kotlinx.serialization.descriptor.SerialDescriptor
导入kotlinx.serialization.encoding.Decoder
导入kotlinx.serialization.encoding.Encoder
导入kotlinx.serialization.json*
导入kotlinx.serialization*
@可序列化
数据类地址(val street:String,val postalCode:String)
@可序列化(with=CustomerSerializer::class)
数据类客户(val id:String,val名称:String,val地址:address)
@可序列化
@序列号(“客户”)
私有数据类CustomerSurrogate(val id:String,val名称:String,val street:String,val postalCode:String)
对象CustomerSerializer:k序列化器{
重写val描述符:SerialDescriptor=CustomerSurrogate.serializer().descriptor
重写有趣的反序列化(解码器:解码器):客户{
val代理=解码器.decodeSerializableValue(CustomerSurrogate.serializer())
返回客户(subrogate.id、subrogate.name、地址(subrogate.street、subrogate.postalCode))
}
重写有趣的序列化(编码器:编码器,值:客户){
val代理=CustomerSurrogate(value.id、value.name、value.address.street、value.address.postalCode)
encoder.encodeSerializableValue(CustomerSurrogate.serializer(),代理)
}
}
主要内容(){
println(Json.encodeToString(客户(“123ABC”、“Joe”、地址(“我的街道”、“123456”))
}