用途:配置 System.Text.Json 源生成,实现兼容 Native AOT、免反射的 JSON 序列化,并在编译期生成类型元数据。适用于准备应用进行 Native AOT 编译、消除反射序列化开销、通过编译期生成序列化代码提升启动性能,或让 JSON 序列化错误在编译期暴露。基础源生成需 .NET 6+,完整选项支持需 .NET 8+。
主要能力与流程:先运行 dotnet-json-polymorphic 技能,确保多态类型已通过 [JsonDerivedType] 配置,再生成上下文。询问适用范围为整个解决方案还是特定项目,过滤出 ASP.NET Core 项目。扫描 Minimal API 模式(MapGet、MapPost、MapPut、MapDelete、MapPatch)并从 lambda 参数与返回类型提取请求/响应类型;扫描控制器特性([HttpGet]、[HttpPost]、[HttpPut]、[HttpDelete]、[HttpPatch])并从操作方法提取参数与返回类型;查找 JsonSerializer.Serialize/Deserialize 调用并提取类型参数;检查是否已有继承 JsonSerializerContext 的类,记录已有 [JsonSerializable] 类型以避免重复。随后询问枚举是否启用字符串转换、属性命名策略(CamelCase、SnakeCaseLower 等)、是否为 null 时忽略。
生成与集成:在项目根目录创建 {ProjectName}JsonContext.cs,类名为 {ProjectName}JsonContext,使用 [JsonSourceGenerationOptions] 设置命名策略与 DefaultIgnoreCondition,并为每个类型添加 [JsonSerializable],集合类型同时添加 List<T>,数组按需添加 T[]。在 Program.cs 中通过 ConfigureHttpJsonOptions 设置 TypeInfoResolver = MyApiJsonContext.Default。用 dotnet build 验证,并报告创建的文件、加入的类型、集成与构建状态。
AOT 配置:完整 AOT 兼容可在 Directory.Build.props 或项目文件中设置 JsonSerializerIsReflectionEnabledByDefault 为 false,确保类型缺失时产生编译期错误。
限制与注意:多态类型须先运行 dotnet-json-polymorphic,多态类型仅使用基于元数据的生成;JsonStringEnumConverter<TEnum> 的 AOT 支持需 .NET 8+;可有多个上下文并用 JsonTypeInfoResolver.Combine() 合并;文档链接为 System.Text.Json Source Generation。