.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
集合。同时,MaxBy
和MinBy
方法可以分别获取整个集合中计数最多和最少的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基础知识,人工智能教程,不是一堆数学公式和算法的那种,用各种举例子来学习,读起来比较轻松,有兴趣可以看一下。
人工智能教程