Kotlin 数据类中的默认参数未使用ktor序列化程序转换为json

Kotlin 数据类中的默认参数未使用ktor序列化程序转换为json,kotlin,serialization,kotlin-multiplatform,ktor,Kotlin,Serialization,Kotlin Multiplatform,Ktor,在http请求中将数据类序列化为json时,我面临一个奇怪的问题 工作代码: @Serializable data class ComanyCustomerLoginData( val email: String, val credential: String, val companyUUID: String, ) val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com", "12

在http请求中将数据类序列化为json时,我面临一个奇怪的问题

工作代码:

@Serializable
data class ComanyCustomerLoginData(
  val email: String,
  val credential: String,
  val companyUUID: String,
)
val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com", "1234", "d80f0b72-a062-11eb-bcbc-0242ac130002")
val response = client.post<HttpResponse>(URL) {
   contentType(ContentType.Application.Json)
   body = customerLoginData
}
@Serializable
数据类ComanyCustomerLoginData(
val电子邮件:String,
val凭证:字符串,
val companyuid:String,
)
val customerloginda=comanycusterloginda(“trwla@gmail.com“,“1234”,“d80f0b72-a062-11eb-bcbc-0242ac130002”)
val response=client.post(URL){
contentType(contentType.Application.Json)
body=customerloginda
}
非工作代码

@Serializable
data class ComanyCustomerLoginData(
  val email: String,
  val credential: String,
  val companyUUID: String = "d80f0b72-a062-11eb-bcbc-0242ac130002",
)
val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com", "1234")
val response = client.post<HttpResponse>(URL) {
   contentType(ContentType.Application.Json)
   body = customerLoginData
}
@Serializable
数据类ComanyCustomerLoginData(
val电子邮件:String,
val凭证:字符串,
val companyuid:String=“d80f0b72-a062-11eb-bcbc-0242ac130002”,
)
val customerloginda=comanycusterloginda(“trwla@gmail.com", "1234")
val response=client.post(URL){
contentType(contentType.Application.Json)
body=customerloginda
}
在非工作代码中,在数据类构造函数中有一个默认参数,但当其序列化时,我在该json中看不到companyuid,但工作代码创建了一个名为companyuid的键

您能指出问题所在吗?

kotlinx序列化中默认的默认值:

描述如何自定义此行为:

val format=Json{encodeDefaults=true}
在Ktor中使用此功能的特定情况下,您可以通过以下方式对其进行自定义:

install(JsonFeature){
serializer=KotlinxSerializer(kotlinx.serialization.json.json{
encodeDefaults=true
})
}

如果通信双方都使用相同的数据模型,那么您不需要这样做。它们都将正确使用默认值,并通过不显式写入来节省带宽。

您需要
encodeDefaults=true

有关更多信息,请参见

当字段等于其默认值时,可能不会序列化字段,因为这样可以节省带宽。这可能是可配置的,但可能是,将检查。谢谢你的意见。