我喜欢的.NET8 Preview 1功能

发布时间 2023-07-25 21:12:18作者: 刘靖凯

  .NET8的第一个预预览版发布了,又开启了一波新技术的学习和研究。简单过了一下.NET8 Preview1,中间有两个功能是我的痛点,先睹为快。

  在项目中,数据从前端UI到后端(后端也分为好几层),再到数据库端,每个端或层的命名规则不尽相同,所以在端之间的数据项命名转换就个痛点,C#中,帕斯卡命名与官方规则最为接近,但数据库或前端就不是了,特别有些数据库对大小写敏感,或不支持大写,这就需要单独处理maping关系了,下面的json的SnakeCase命名规则,就解决大问题了,上代码:

using System.Text.Encodings.Web;
using System.Text.Json;

var customer = new { ID = 1, PizCode="1234567",FirstName="素伟",LastName="" };

Console.WriteLine(JsonSerializer.Serialize(customer, new JsonSerializerOptions { 
    PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
    Encoder=JavaScriptEncoder.UnsafeRelaxedJsonEscaping
}));

Console.WriteLine(JsonSerializer.Serialize(customer, new JsonSerializerOptions {
    PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseUpper,
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
}));

Console.WriteLine(JsonSerializer.Serialize(customer, new JsonSerializerOptions {
    PropertyNamingPolicy = JsonNamingPolicy.KebabCaseLower,
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
}));

Console.WriteLine(JsonSerializer.Serialize(customer, new JsonSerializerOptions {
    PropertyNamingPolicy = JsonNamingPolicy.KebabCaseUpper,
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
}));

  下面是几个新的规则的运行结果:

 

  另一个点是在路由格式化,在.NET8中,对路由中的{}作了特列处理,更厉害的是还支持正则。

app.MapGet("/test/{id:int}", (int id) => { return $"你好:{id}"; });
app.MapGet("/orders/{tel:regex(^\\d{{3,4}}(-\\d{{4}}){{2}}$)}", (string tel) => { return $"电话:{tel}"; });

  VistalStudio中的效果图

 结果1:

结果2:

 

 想要更快更方便的了解相关知识,可以关注微信公众号