Commit 94c3e2f5 authored by ryoii's avatar ryoii

fix json parser polymorphic support

parent 2c9d38df
...@@ -87,9 +87,7 @@ abstract class Session internal constructor( ...@@ -87,9 +87,7 @@ abstract class Session internal constructor(
* *
* TempSession在建立180s内没有转变为[AuthedSession]应被清除 * TempSession在建立180s内没有转变为[AuthedSession]应被清除
*/ */
class TempSession internal constructor(coroutineContext: CoroutineContext) : Session(coroutineContext) { class TempSession internal constructor(coroutineContext: CoroutineContext) : Session(coroutineContext)
}
/** /**
* 任何[TempSession]认证后转化为一个[AuthedSession] * 任何[TempSession]认证后转化为一个[AuthedSession]
......
...@@ -2,19 +2,10 @@ package net.mamoe.mirai.api.http.dto ...@@ -2,19 +2,10 @@ package net.mamoe.mirai.api.http.dto
import kotlinx.serialization.* import kotlinx.serialization.*
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
interface DTO 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状态 // 解析失败时直接返回null,由路由判断响应400状态
@UseExperimental(ImplicitReflectionSerializer::class) @UseExperimental(ImplicitReflectionSerializer::class)
inline fun <reified T : Any> String.jsonParseOrNull( inline fun <reified T : Any> String.jsonParseOrNull(
...@@ -32,7 +23,6 @@ inline fun <reified T : Any> T.toJson( ...@@ -32,7 +23,6 @@ inline fun <reified T : Any> T.toJson(
else MiraiJson.json.stringify(serializer, this) else MiraiJson.json.stringify(serializer, this)
// 序列化列表时,stringify需要使用的泛型是T,而非List<T> // 序列化列表时,stringify需要使用的泛型是T,而非List<T>
// 因为使用的stringify的stringify(objs: List<T>)重载 // 因为使用的stringify的stringify(objs: List<T>)重载
@UseExperimental(ImplicitReflectionSerializer::class, UnstableDefault::class) @UseExperimental(ImplicitReflectionSerializer::class, UnstableDefault::class)
...@@ -40,3 +30,25 @@ inline fun <reified T : Any> List<T>.toJson( ...@@ -40,3 +30,25 @@ inline fun <reified T : Any> List<T>.toJson(
serializer: SerializationStrategy<List<T>>? = null serializer: SerializationStrategy<List<T>>? = null
): String = if (serializer == null) MiraiJson.json.stringify(this) ): 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()
}
})
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment