mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-10 12:10:10 +08:00
fix json parser polymorphic support
This commit is contained in:
parent
2c9d38dffa
commit
94c3e2f53d
@ -87,9 +87,7 @@ abstract class Session internal constructor(
|
||||
*
|
||||
* TempSession在建立180s内没有转变为[AuthedSession]应被清除
|
||||
*/
|
||||
class TempSession internal constructor(coroutineContext: CoroutineContext) : Session(coroutineContext) {
|
||||
|
||||
}
|
||||
class TempSession internal constructor(coroutineContext: CoroutineContext) : Session(coroutineContext)
|
||||
|
||||
/**
|
||||
* 任何[TempSession]认证后转化为一个[AuthedSession]
|
||||
|
@ -2,19 +2,10 @@ package net.mamoe.mirai.api.http.dto
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
|
||||
interface DTO
|
||||
|
||||
object MiraiJson {
|
||||
// val json = Json(context = SerializersModule {
|
||||
// polymorphic(MessagePacketDTO.serializer()) {
|
||||
// GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer()
|
||||
// FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer()
|
||||
// }
|
||||
// })
|
||||
val json = Json
|
||||
}
|
||||
|
||||
// 解析失败时直接返回null,由路由判断响应400状态
|
||||
@UseExperimental(ImplicitReflectionSerializer::class)
|
||||
inline fun <reified T : Any> String.jsonParseOrNull(
|
||||
@ -32,11 +23,32 @@ inline fun <reified T : Any> T.toJson(
|
||||
else MiraiJson.json.stringify(serializer, this)
|
||||
|
||||
|
||||
|
||||
// 序列化列表时,stringify需要使用的泛型是T,而非List<T>
|
||||
// 因为使用的stringify的stringify(objs: List<T>)重载
|
||||
@UseExperimental(ImplicitReflectionSerializer::class, UnstableDefault::class)
|
||||
inline fun <reified T : Any> List<T>.toJson(
|
||||
serializer: SerializationStrategy<List<T>>? = null
|
||||
): String = if (serializer == null) MiraiJson.json.stringify(this)
|
||||
else MiraiJson.json.stringify(serializer, this)
|
||||
else MiraiJson.json.stringify(serializer, this)
|
||||
|
||||
|
||||
/**
|
||||
* Json解析规则,需要注册支持的多态的类
|
||||
*/
|
||||
object MiraiJson {
|
||||
val json = Json(context = SerializersModule {
|
||||
polymorphic(MessagePacketDTO.serializer()) {
|
||||
GroupMessagePacketDTO::class with GroupMessagePacketDTO.serializer()
|
||||
FriendMessagePacketDTO::class with FriendMessagePacketDTO.serializer()
|
||||
UnKnownMessagePacketDTO::class with UnKnownMessagePacketDTO.serializer()
|
||||
}
|
||||
polymorphic(MessageDTO.serializer()) {
|
||||
AtDTO::class with AtDTO.serializer()
|
||||
FaceDTO::class with FaceDTO.serializer()
|
||||
PlainDTO::class with PlainDTO.serializer()
|
||||
ImageDTO::class with ImageDTO.serializer()
|
||||
XmlDTO::class with XmlDTO.serializer()
|
||||
UnknownMessageDTO::class with UnknownMessageDTO.serializer()
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user