跳到主要内容
版本:4.0

WebAPI 数据序列化

一、数据序列化

数据序列化用于将对象转换为传输格式(如 JSON、XML)。TouchSocket.WebApi 支持多种序列化格式。

1.1 默认序列化器

框架默认支持以下格式化器,根据 Accept 请求头自动选择:

  • application/jsontext/json:使用 JSON 格式化(默认:Newtonsoft.Json)
  • application/xmltext/xml:使用 XML 格式
  • text/plain:使用文本格式化

1.2 配置序列化器

在添加 WebApi 插件时,可以配置序列化器:

🔄 正在加载代码...

1.3 使用 System.Text.Json

对于需要 AOT 支持的场景,推荐使用 System.Text.Json

🔄 正在加载代码...

1.4 自定义序列化器

可以实现自定义的序列化器:

🔄 正在加载代码...

二、AOT 支持

TouchSocket.WebApi 完整支持 Native AOT 编译。

2.1 基础配置

在项目文件中启用AOT:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<PublishAot>true</PublishAot>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 根据目标平台选择 -->
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
...
</Project>

2.2 JSON 序列化上下文

AOT 需要定义 JSON 序列化上下文:

🔄 正在加载代码...
提示

一般情况下,建议为所有需要序列化的类型创建上下文以确保兼容性。包括Rpc方法的返回类型参数类型以及类中类等,一切可能被序列化的类型都应包含在上下文中。

2.3 配置序列化器

使用 System.Text.Json 并指定序列化上下文:

🔄 正在加载代码...

2.4 服务注册

使用源生成器注册服务:

🔄 正在加载代码...

2.5 发布

使用以下命令发布 AOT 应用:

dotnet publish -c Release

生成的可执行文件体积小、启动快、无需运行时。

三、注意事项

3.1 序列化注意事项

  1. 格式化器顺序:可以通过设置 Order 属性来控制格式化器的优先级
  2. 内容协商:框架会根据请求的 Accept 头自动选择合适的格式化器
  3. 自定义格式化器:实现 ISerializerFormatter<string, HttpContext> 接口即可添加自定义格式化器

3.2 AOT 注意事项

  1. 避免反射:使用源生成器而不是反射
  2. 序列化类型:所有序列化类型必须添加到 JsonSerializable 特性
  3. 第三方库:确保所有依赖库支持 AOT