【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法
欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录
- 背景
- Main入口
- 简化写法
- 统一时间格式
- 相关文章
背景
在.NET Core 6.0中,对JSON的序列化和反序列化进行了许多改进,特别是与
System.Text.Json命名空间相关的功能。当涉及到在
Program.cs(或
Program.Main方法)中统一时间格式的JSON格式化时,开发者可以配置
JsonSerializerOptions来确保所有序列化的日期和时间都遵循相同的格式。
Main入口
在.NET Core 6.0中,你可以使用System.Text.Json命名空间来控制全局的JSON序列化设置,包括日期时间的格式化。你可以在Program.cs中设置全局的JsonSerializerOptions,以确保整个应用程序中的JSON序列化都按照统一的格式进行处理。
下面是一个示例,在Program.cs中设置全局的JSON序列化选项,包括自定义日期时间格式化:
using System; using System.Text.Json; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureAppConfiguration((hostingContext, config) => { // 设置全局的JSON序列化选项 JsonSerializerOptions jsonOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, WriteIndented = true, DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault }; jsonOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); jsonOptions.Converters.Add(new System.Text.Json.Serialization.JsonDateTimeConverter()); config.Services.AddSingleton(typeof(JsonSerializerOptions), jsonOptions); }); webBuilder.UseStartup(); }); }
简化写法
从.NET Core 3.0开始,Startup.cs 类就被视为一种约定而非强制要求,并且到了.NET 6.0,这一趋势得到了进一步的简化,因为Program.cs中的Main方法和Startup类都被新的顶级语句(Top-level Statements)和最小API(Minimal APIs)所替代。
在.NET 6.0及更高版本中,Program.cs文件通常看起来非常简洁,因为它使用了顶级语句,这些语句直接定义了应用程序的启动和配置逻辑。同时,如果你正在使用Web应用程序,你可能会看到使用WebApplicationBuilder和WebApplication的新API来构建和配置你的Web应用程序,而不是使用传统的MVC或Razor Pages的Startup.cs。
以下是一个简单的.NET 6.0 Web应用程序的Program.cs示例,它没有Main方法和Startup类:
var builder = WebApplication.CreateBuilder(args); // 添加服务到容器中 builder.Services.AddControllers(); // 你可以继续添加其他中间件或服务配置... var app = builder.Build(); // 配置HTTP请求管道 if (!app.Environment.IsDevelopment()) { // 在生产环境中,配置中间件来捕获异常并生成错误响应 app.UseExceptionHandler("/Error"); // 使用HTTPS重定向中间件 app.UseHttpsRedirection(); app.UseStaticFiles(); } app.UseRouting(); app.UseAuthorization(); app.MapControllers(); // 映射控制器路由 // 其他中间件配置... app.Run(); // 运行应用程序
统一时间格式
在.NET Core 6.0中,可以通过在
JsonSerializerOptions中注册自定义的
JsonConverter,来实现全局的日期时间格式化。下面是一个示例,展示如何在.NET Core 6.0中使用
CustomDateTimeConverter进行日期时间格式化:
using System; using System.Text.Json; using System.Text.Json.Serialization; // Custom DateTime Converter public class CustomDateTimeConverter : JsonConverter { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // Implement logic to read DateTime from JSON // This method is called when deserializing JSON throw new NotImplementedException(); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { // Implement logic to write DateTime to JSON // This method is called when serializing DateTime to JSON writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } } var builder = WebApplication.CreateBuilder(args); // 设置全局的JSON序列化选项 builder.Services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.WriteIndented = true; options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault; options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.Converters.Add(new CustomDateTimeConverter()); }); var app = builder.Build(); // 注册中间件和路由 app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.Run();
相关文章
【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法
【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点
【C#】 SortedDictionary,查找字典中是否存在给定的关键字
【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化
【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
【C#】约瑟夫原理举例2个代码实现
【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式
温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。