我喜欢的.NET8 Preview 1功能
.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:
想要更快更方便的了解相关知识,可以关注微信公众号