如何使用kotlinx.serialization在Ktor中序列化Web套接字Frame.text webSocket(“/ws”){ 试一试{ while(true){ 当(val frame=incoming.receive()时){ 是Frame.Text->{ val text=frame.readText()//我想将其序列化为类对象 发送(Frame.Text(processRequest(Text))) } else->TODO() } } }最后{ 待办事项() } }
我想序列化如何使用kotlinx.serialization在Ktor中序列化Web套接字Frame.text webSocket(“/ws”){ 试一试{ while(true){ 当(val frame=incoming.receive()时){ 是Frame.Text->{ val text=frame.readText()//我想将其序列化为类对象 发送(Frame.Text(processRequest(Text))) } else->TODO() } } }最后{ 待办事项() } },kotlin,ktor,kotlinx.serialization,Kotlin,Ktor,Kotlinx.serialization,我想序列化frame.readText()以返回类对象 我对Ktor world完全陌生,我不知道这是否可能您可以使用底层的kotlinx.serialization,您可能已经为ContentNegotiation设置好了它。如果没有,可以找到说明。这将需要使您的类(我假定名称为ObjectType)可以用@serializable序列化。有关如何使类可序列化以及如何编码/解码为JSON格式的更多详细信息。我包含了解决方案片段: webSocket("/ws") {
frame.readText()
以返回类对象
我对Ktor world完全陌生,我不知道这是否可能您可以使用底层的
kotlinx.serialization
,您可能已经为ContentNegotiation设置好了它。如果没有,可以找到说明。这将需要使您的类(我假定名称为ObjectType
)可以用@serializable
序列化。有关如何使类可序列化以及如何编码/解码为JSON格式的更多详细信息。我包含了解决方案片段:
webSocket("/ws") {
try {
while (true) {
when(val frame = incoming.receive()){
is Frame.Text -> {
val text = Json.decodeFromString<ObjectType>(frame.readText())
send(Frame.Text(processRequest(text)))
}
else -> TODO()
}
}
} finally {
TODO()
}
}
请您更好地解释一下
文本中的变量是什么,好吗?是JSON字符串吗?还是别的什么?如果您有一个JSON字符串,您可以使用它,非常感谢
incoming.consumeAsFlow()
.mapNotNull { it as? Frame.Text }
.map { it.readText() }
.map { Json.decodeFromString<ObjectType>(it) }
.collect { object -> send(processRequest(object))}
//here comes what you would put in the `finally` block,
//which is executed after flow collection ends