.NET 9 Preview 1中的两个功能

.NET 9 Preview 1中的两个实用功能

一、JSON缩进功能优化

在.NET 9 Preview 1中,JSON序列化的缩进控制得到了显著的增强。这一功能对于开发者来说非常实用,尤其是在调试和查看JSON数据时,能够让数据的结构更加清晰易读。

1. 代码实现

以下是实现JSON缩进的示例代码:

using System.Text.Json;

var options = new JsonSerializerOptions
{
    // 启用缩进
    WriteIndented = true,
    // 缩进字符
    IndentCharacter = ' ',
    // 缩进大小
    IndentSize = 6,
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};

string json = JsonSerializer.Serialize(
    new { Name = "张三", Age = 20, Sex = "男" },
    options
);

Console.WriteLine(json);

2. 注意事项

需要注意的是,支持的缩进字符只有空格和水平制表符(tab键),如果使用其他字符会导致报错。这是为了遵循JSON格式的规范,确保生成的JSON数据是标准且可被广泛解析的。

3. 输出示例

{
      "Name": "张三",
      "Age": 20,
      "Sex": "男"
}

4. 新增配置

除了原有的JsonSerializerOptions.Default配置,.NET 9 Preview 1还新增了JsonSerializerOptions.Web配置,其默认采用驼峰命名策略。示例代码如下:

var webJson = JsonSerializer.Serialize(
    new { UserName = "gsw", Password = "123456" },
    JsonSerializerOptions.Web // Defaults to camelCase naming policy.
);

Console.WriteLine(webJson);

5. 输出结果

{"userName":"gsw","password":"123456"}

这种新增的配置为开发者在处理Web应用中的JSON数据时提供了更多的选择,能够更好地与前端的命名规范保持一致,减少数据转换的复杂度。

二、Linq扩展方法CountBy和AggregateBy

1. CountBy方法

CountBy方法可以将具有相同键的元素进行计数,并返回一个KeyValue集合。同时,MaxByMinBy方法可以分别获取整个集合中计数最多和最少的KeyValue对,如果有相同的计数,则取第一个。

示例代码
var 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.""";
Console.WriteLine(sourceText);

var KVs = sourceText
    .Split(new char[] { ' ', '.', ',', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(word => word.ToLowerInvariant())
    .CountBy(word => word);

foreach (var item in KVs)
{
    Console.WriteLine(item.Key + ":" + item.Value);
}

Console.WriteLine("-------------------------");
var mostFrequentWord = KVs.MaxBy(pair => pair.Value);
Console.WriteLine(mostFrequentWord.Key + ":" + mostFrequentWord.Value);

Console.WriteLine("-------------------------");
mostFrequentWord = KVs.MinBy(pair => pair.Value);
Console.WriteLine(mostFrequentWord.Key + ":" + mostFrequentWord.Value);
运行结果
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.
lorem:1
ipsum:1
dolor:2
sit:2
amet:3
consectetur:1
adipiscing:2
elit:1
sed:2
non:1
risus:1
suspendisse:1
lectus:1
tortor:1
dignissim:1
nec:1
ultricies:1
cras:1
elementum:1
ultrices:1
diam:1
-------------------------
amet:3
-------------------------
lorem:1

通过CountBy方法,我们可以快速统计文本中每个单词的出现次数,这在文本分析和数据统计中非常有用。

2. AggregateBy方法

AggregateBy方法则是对KeyValue集合进行求和计算。以下是一个示例:

var orders = new Order[]
{
    new Order("zs", 1, DateTime.Now),
    new Order("ls", 2, DateTime.Now),
    new Order("ww", 3, DateTime.Now),
    new Order("zs", 4, DateTime.Now),
    new Order("ls", 5, DateTime.Now),
    new Order("ww", 6, DateTime.Now)
};

var kvs = orders.AggregateBy(
    keySelector: order => order.OrderUser,
    seed: 0m,
    (orderAmount, order) => orderAmount + order.OrderAmount
);

foreach (var item in kvs)
{
    Console.WriteLine(item.Key + ":" + item.Value);
}

record Order(string OrderUser, decimal OrderAmount, DateTime OrderTime);
运行结果
zs:5
ls:7
ww:9

这个方法对于处理订单数据等场景非常有用,可以快速计算每个用户的订单总金额。

总的来说,.NET 9 Preview 1中的这两个功能为开发者提供了更多的便利和灵活性,能够提高开发效率和代码的可读性。在实际项目中,我们可以根据具体的需求合理运用这些功能,让开发工作更加高效。 ======================================================================
前些天发现了一个比较好玩的人工智能学习网站,通俗易懂,风趣幽默,可以了解了解AI基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

步、步、为营

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

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

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

打赏作者

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

抵扣说明:

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

余额充值