public class Startup { public void ConfigureServices(IServiceCollection services) { // ... services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = new SnakeCasePropertyNamingPolicy(); }); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1"}); c.SchemaFilter(); }); } } public class SnakeCasePropertyNamingPolicy : JsonNamingPolicy { public override string ConvertName(string name) { return name.ToSnakeCase(); } } public static class StringExtensions { public static string ToSnakeCase(this string str) { return string.Concat(str.Select((character, index) => index > 0 && char.IsUpper(character) ? "_" + character : character.ToString())) .ToLower(); } } public class SnakeCaseSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (schema.Properties == null) return; if (schema.Properties.Count == 0) return; var keys = schema.Properties.Keys; var newProperties = new Dictionary(); foreach (var key in keys) { newProperties[key.ToSnakeCase()] = schema.Properties[key]; } schema.Properties = newProperties; } }