首页 > 其他分享 >.NET 9 的几个新特性,新颖吗?

.NET 9 的几个新特性,新颖吗?

时间:2024-05-07 12:55:05浏览次数:25  
标签:Web 新颖 特性 HashData API 哈希 NET 序列化

简介

继.NET 8之后,.NET 9在云原生应用程序得到了增强和性能得到提升。它是STS版本,将获得为期18个月的标准支持服务。你可以到官网下载.NET 9。它的几个改进如下:

序列化

在System.Text.Json中,.NET 9为序列化JSON提供了新的选项和一个新的单例,使得使用Web默认值进行序列化变得更加容易。

1、缩进选项

var options = new JsonSerializerOptions
{
    WriteIndented = true,
    IndentCharacter = '\t',
    IndentSize = 2,
};

string json = JsonSerializer.Serialize(
    new { Value = 1 },
    options
);
Console.WriteLine(json);
// {
//                 "Value": 1
// }

在C#中,JsonSerializeOptions包含了新的属性,允许你自定义写入JSON的缩进字符和缩进大小,如上所示。

2、默认Web选项

string webJson = JsonSerializer.Serialize(
    new { SomeValue = 42 },
    JsonSerializerOptions.Web // 默认为小驼峰命名策略。
);
Console.WriteLine(webJson);
// {"someValue":42}

在C#中,如果你想使用ASP.NET Core用于Web应用程序的默认选项进行序列化,可以使用新的JsonSerializeOptions.Web单例。

LINQ

最近添加到工具箱中的CountBy和AggregateBy方法。这些函数通过键进行状态聚合,消除了通过GroupBy进行中间分组的需要。

CountBy允许快速计算每个键的频率。在以下示例中,它识别给定文本字符串中出现最频繁的单词。

string sourceText = """
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Sed non risus. Suspendisse lectus tortor, dignissim sit amet,
    adipiscing nec, ultricies sed, dolor. Cras elementum ultrices amet diam.
""";

// 查找文本中出现最频繁的单词。
KeyValuePair<string, int> mostFrequentWord = sourceText
    .Split(new char[] { ' ', '.', ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(word => word.ToLowerInvariant())
    .CountBy(word => word)
    .MaxBy(pair => pair.Value);

Console.WriteLine(mostFrequentWord.Key);

AggregateBy提供了执行更广泛、更多样化工作流程的能力。以下示例展示了与指定键相关联的分数计算。

(string id, int score)[] data =
    [
        ("0", 42),
        ("1", 5),
        ("2", 4),
        ("1", 10),
        ("0", 25),
    ];

var aggregatedData =
    data.AggregateBy(
        keySelector: entry => entry.id,
        seed: 0,
        (totalScore, curr) => totalScore + curr.score
    );

foreach (var item in aggregatedData)
{
    Console.WriteLine(item);
}
// (0, 67)
// (1, 15)
// (2, 4)

加密

在加密方面,.NET 9引入了CryptographicOperations类型中的新的一次性哈希方法。.NET提供了各种静态的“一次性”哈希函数和相关函数的实现,如SHA256.HashData和HMACSHA256.HashData。使用一次性API是首选的,因为它们有潜力优化性能并最小化或消除分配。

开发人员旨在创建支持哈希,调用方定义哈希算法的API时,通常涉及接受HashAlgorithmName参数。然而,使用一次性API来处理此模式通常需要转换每个可能的HashAlgorithmName,然后使用相应的方法。为了解决这个问题,.NET 9引入了CryptographicOperations.HashData API。这个API使得能够对输入进行哈希或HMAC的生成作为一次性操作,算法由HashAlgorithmName确定。

static void HashAndProcessData(HashAlgorithmName hashAlgorithmName, byte[] data)
{
    byte[] hash = CryptographicOperations.HashData(hashAlgorithmName, data);
    ProcessHash(hash);
}

结语

.NET 9引入了针对云原生应用和性能优化的重大增强。通过对序列化、LINQ改进和加密方面的关注,开发人员可以利用新功能和API来简化开发流程并增强应用程序安全性。值得注意的增强包括增强的JSON序列化选项,强大的LINQ方法如CountBy和AggregateBy,以及方便的CryptographicOperations.HashData API,用于高效的哈希操作。随着.NET 9的不断发展,它承诺为各种用例提供强大的工具和功能,帮助开发人员构建现代化、高性能的应用程序。

大家对.NET 9有啥期待,欢迎大家留言讨论!

.NET 9的下载地址:dotnet.microsoft.com/en-us/download/dotnet/9.0

译自:c-sharpcorner.com/article/what-new-in-net-9

来源公众号:DotNet开发跳槽❀    

标签:Web,新颖,特性,HashData,API,哈希,NET,序列化
From: https://www.cnblogs.com/xbhp/p/18177022

相关文章

  • 232自由口转Profinet网关接AB扫码枪与PLC通讯案例
     232自由口转Profinet网关(XD-PNR100/300),是一种用于将自由协议转换为Profinet协议的设备,可以实现不同网络之间的通信和数据交换。232自由口转Profinet网关高度的灵活性和可靠性使其成为工业自动化领域的重要工具,并将其与Profinet网络无缝集成,实现数据的快速传输和交换。另外23......
  • 漂亮的.NET控制台应用程序类库--Spectre.Console
    思维导航前言项目特性项目源代码新建控制台应用安装项目的NuGet包控制台文字输出table表格输出条形图日历布局规则水平线项目源码地址优秀项目和框架精选DotNetGuide技术社区交流群前言做过.NET控制台应用程序的同学应该都知道原生的.NET控制台应用程序输出......
  • Dash 2.17版本新特性介绍
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master大家好我是费老师,不久前Dash发布了其2.17.0版本,执行下面的命令进行最新版本Dash的安装:pipinstalldash-U2.17版本中新增了多项重要的新功能,使得我们在开发Dash应用功能时更加的得心应......
  • C#.NET体系图文概述—2024最全总结
    C#是一种简单、现代、面向对象和类型安全的编程语言。。.NET是由Microsoft创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NETFramework、.NETCore(及后续的.NET5+版本),以及社区版本Mono。除此以外,C#.NET体系还......
  • 使用.NET源生成器(SG)实现一个自动注入的生成器
    DI依赖注入对我们后端程序员来说肯定是基础中的基础了,我们经常会使用下面的代码注入相关的serviceservices.AddScoped<Biwen.AutoClassGen.TestConsole.Services.TestService2>();services.AddTransient<Biwen.AutoClassGen.TestConsole.Services.TestService2>();services.Ad......
  • .NET服务端网页截图
    一.引入PuppeteerSharpnuget包;二.服务端网页截图方法publicclassWebPageUtil{///<summary>///服务端网页截图///</summary>///<paramname="url">网页URL</param>///<paramname="sleepS......
  • [转帖]Oracle Exadata 学习笔记之核心特性Part1
    https://www.cnblogs.com/jyzhao/p/12257649.html#2 近年来,国内众多厂商都有一体机的产品,不过更多都是围绕硬件本身的堆砌和优化,那么这些产品和Oracle一体机最大的区别在哪里呢?最近读了李亚的《OracleExadata技术详解》,系统的了解了Exadata的一些核心特性,我个人认为这些特......
  • 入门学习Docker部署Vue+NetCore+MsSql
    最近vultr的主机经常忘了续租,导致账号被禁用,主机被删掉每次重新部署都忘了之前怎么弄的,要重新查好多资料每个月6美金的主机XShell连接主机IP先安装docker开启docker服务镜像容器tar文件 saveload dockerimagesdockercommitbuildDockerfilepull仓库 查看......
  • .net 6 栈的大小是多少
    .NET6中线程栈的默认大小并没有在官方文档中明确给出一个具体的数值,因为它可以根据操作系统、体系结构(32位或64位)以及线程启动时的特定条件有所不同。一般来说,对于托管代码,.NET中的线程栈大小默认是相对较大的,通常在1MB到1MB范围内,具体大小可能会根据操作系统的默认设置和可用......
  • ASP.NET Core Razor Pages 使用 视图(View) 组件
    参考文章地址:为什么要在ASP.NETCore中使用视图组件(telerik.com)为什么使用视图组件而不是分部视图?最大的原因是,在Razor页面中插入分部视图时,与调用View关联的所有ViewData都会自动与分部视图关联。这意味着分部视图在一个Razor页面上的行为可能与在另一个页面上的行......