【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法

欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

背景

在.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#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

  • 25
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值