如何为单个模型修改OpenAPI TypeScript代码生成的命名格式?
实现单个模型保留PascalCase其余转camelCase的方案
针对你的需求,有几种实用的实现方式,根据场景选择即可:
1. 直接为目标模型属性指定JsonPropertyName特性
这是最直接的方式,给需要保留PascalCase的模型属性添加[JsonPropertyName]特性,显式指定JSON字段名:
public class SpecialJsonModel { [JsonPropertyName("FirstName")] public string FirstName { get; set; } [JsonPropertyName("LastName")] public string LastName { get; set; } // 其他属性同理 }
全局配置保持JsonNamingPolicy.CamelCase不变,序列化/反序列化时该模型会优先使用特性指定的PascalCase名称,其余模型正常转为camelCase。
2. 为特殊模型单独配置序列化选项
如果不想给每个属性加特性,可以在处理该模型的序列化/反序列化操作时,使用独立的配置:
// 全局默认配置(应用于大部分模型) var globalJsonOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; // 针对特殊模型的配置:保留原属性名称(PascalCase) var specialJsonOptions = new JsonSerializerOptions { PropertyNamingPolicy = null // 不启用任何命名转换 }; // 反序列化特殊模型时使用单独配置 var specialModel = JsonSerializer.Deserialize<SpecialJsonModel>(jsonContent, specialJsonOptions); // 序列化时同理 var serializedSpecialModel = JsonSerializer.Serialize(specialModel, specialJsonOptions);
3. 配置Swagger文档显示PascalCase(如果需要)
如果你的项目用Swashbuckle生成Swagger文档,要让该模型在文档中显示PascalCase,可自定义Schema过滤器:
第一步:实现ISchemaFilter
public class SpecialModelSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { // 只处理目标模型 if (context.Type != typeof(SpecialJsonModel)) return; var updatedProperties = new Dictionary<string, OpenApiSchema>(); foreach (var prop in schema.Properties) { // 将camelCase转回PascalCase var pascalCaseName = char.ToUpperInvariant(prop.Key[0]) + prop.Key.Substring(1); updatedProperties.Add(pascalCaseName, prop.Value); } schema.Properties.Clear(); foreach (var prop in updatedProperties) { schema.Properties.Add(prop.Key, prop.Value); } } }
第二步:注册过滤器
在Program.cs(或Startup.cs)中添加Swagger配置时注册该过滤器:
builder.Services.AddSwaggerGen(options => { options.SchemaFilter<SpecialModelSchemaFilter>(); });
内容的提问来源于stack exchange,提问作者Stanley
相关产品推荐
相关产品推荐

