Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请提供一个方便JSON类型鉴别器识别的字段,并保持字段第一位,并且合并类型 #256

Open
bunnyi116 opened this issue Apr 22, 2024 · 0 comments
Labels
C-rfc Category: 改进提案 ST-draft Status: 草稿

Comments

@bunnyi116
Copy link

bunnyi116 commented Apr 22, 2024

说明

首先说明我使用的语言为 .NET 8.0,我使用 System.Text.Json 的类型鉴别器发现一个问题。

type 字段它必须保证为第一位,否则它无法正常工作抛出异常,我查阅了C#运行时仓库的相关反馈

dotnet/runtime/issues/72604 ,确实是不支持,不过在.NET9后开始支持,它会给我们提供个AllowOutOfOrderMetadataProperties属性用于控制读取无序的JSON,但这样需要预先读取所有内容进行缓存所以出现了性能效率问题(变慢)。

image

当然还有一个问题,不支持子类型嵌套的类型鉴别器,也就是子类型无效,这样导致后果只能进行手动进行序列化和反序列化,我个人觉得在一个同级类型中就不要搞什么主类型和子类型了,只弄一个Type类型字段,可以采用 message.private/ message.group / xxx.xxx.xxx.xxx.... 进行表示

image

简述

1.调整type字段为第一位(另一个解决方案增加一个新的 $type 字段到第一位)
2.同级类不单独再设置一个子类型字段,应与type进行合并,使用 xxx.xxx.xxx.xxx.... 进行表示,使用 . 分割代表有子类型,示例:message.privatemessage.group 以便多态序列化和反序列化,目前我看见的OneBot都是通过手动序列化/反序列化 提取typedetail_type, 然后根据多态类类型字典进行查找然后再次序列化到目标的类

image

最后

我个人觉得消息段中使用Data套了一层,我觉得是没有必要的

@bunnyi116 bunnyi116 added C-rfc Category: 改进提案 ST-draft Status: 草稿 labels Apr 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-rfc Category: 改进提案 ST-draft Status: 草稿
Projects
None yet
Development

No branches or pull requests

1 participant