-
Notifications
You must be signed in to change notification settings - Fork 165
Open
Labels
Description
说明
首先说明我使用的语言为 .NET 8.0,我使用 System.Text.Json 的类型鉴别器发现一个问题。
type 字段它必须保证为第一位,否则它无法正常工作抛出异常,我查阅了C#运行时仓库的相关反馈
dotnet/runtime/issues/72604 ,确实是不支持,不过在.NET9后开始支持,它会给我们提供个AllowOutOfOrderMetadataProperties属性用于控制读取无序的JSON,但这样需要预先读取所有内容进行缓存所以出现了性能效率问题(变慢)。
当然还有一个问题,不支持子类型嵌套的类型鉴别器,也就是子类型无效,这样导致后果只能进行手动进行序列化和反序列化,我个人觉得在一个同级类型中就不要搞什么主类型和子类型了,只弄一个Type类型字段,可以采用 message.private/ message.group / xxx.xxx.xxx.xxx.... 进行表示
简述
1.调整type字段为第一位(另一个解决方案增加一个新的 $type 字段到第一位)
2.同级类不单独再设置一个子类型字段,应与type进行合并,使用 xxx.xxx.xxx.xxx.... 进行表示,使用 . 分割代表有子类型,示例:message.private 、 message.group 以便多态序列化和反序列化,目前我看见的OneBot都是通过手动序列化/反序列化 提取type 和 detail_type, 然后根据多态类类型字典进行查找然后再次序列化到目标的类
最后
我个人觉得消息段中使用Data套了一层,我觉得是没有必要的
401U


