欢迎来到《小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<Startup>();
});
}
简化写法
从.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<DateTime>
{
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#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式
温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。