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

2024-06-04 1965阅读

欢迎来到《小5讲堂》

这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

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

目录

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

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


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]