首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类序列化器“.”找不到。ktor + kotlinx.serialization

类序列化器“.”找不到。ktor + kotlinx.serialization
EN

Stack Overflow用户
提问于 2022-09-22 14:56:00
回答 1查看 274关注 0票数 0

我使用的是ktor + kotlinx.serialization,我希望实现call.respond(Respond("some mesage",null))的json响应,如下所示:

result = null时的

代码语言:javascript
复制
{ "message" : "some mesage" }

result is any Type时的

代码语言:javascript
复制
{ 
"message" : "some mesage",
"result" : "showing result"
}

or

{ 
"message" : "some mesage",
"result" : 0.0
}

  • my响应数据类

代码语言:javascript
复制
@kotlinx.serialization.Serializable
data class Respond<T>(

   @SerialName("message")
   val message : String? = null,

   @SerialName("result")
   val result : T? = null
)

但它让我犯了这样的错误:

代码语言:javascript
复制
Serializer for class 'Respond' is not found.
Mark the class as @Serializable or provide the serializer explicitly.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-23 04:36:43

我通过创建BaseResponse的继承,然后使用可空字符串覆盖结果类型的多态响应实现了:

代码语言:javascript
复制
@kotlinx.serialization.Serializable
sealed class BaseResponse<T> {
    abstract val message: String?
    abstract val result: T?
}

@kotlinx.serialization.Serializable
@SerialName("Response")
class Response(
    @SerialName("message") override val message: String?, override val result: String? = null
) : BaseResponse<String>()

@kotlinx.serialization.Serializable
@SerialName("FullResponse")
class FullBaseResponse<T>(
    @SerialName("message") override val message: String?, override val result: T
) : BaseResponse<T>()

val responseModule = SerializersModule {
    polymorphic(BaseResponse::class) {
        subclass(Response.serializer())
        subclass(FullBaseResponse.serializer(PolymorphicSerializer(Any::class)))
    }
}

并添加了json配置:

代码语言:javascript
复制
install(ContentNegotiation) {
        json(Json {
            explicitNulls = false
            serializersModule = responseModule
        })
    }

所以当我只想显示消息时,我只使用call.respond(Respond("some message"))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73816802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档