using Microsoft.OpenApi.Models; using Newtonsoft.Json.Serialization; using Swashbuckle.AspNetCore.SwaggerGen; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() }; }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SchemaFilter(); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.MapControllers(); app.Run(); public class SnakeCaseSchemaFilter : ISchemaFilter { private readonly SnakeCaseNamingStrategy _namingStrategy = new(); public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (schema.Properties == null) return; var newProps = new Dictionary(); foreach (var prop in schema.Properties) { var snakeName = _namingStrategy.GetPropertyName(prop.Key, false); newProps[snakeName] = prop.Value; } schema.Properties = newProps; } }