當前位置: 妍妍網 > 碼農

.NET 9 Preview 1中的兩個功能

2024-02-15碼農

Json縮排

增加了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);

需要註意支持的縮排字元只有空格和水平制表符(tab鍵),其他字元會報錯。下面是輸出結果。

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

JsonSerializerOptions原來提供了一個 JsonSerializerOptions. Defalut的配置同時提供了一個,現在又加了一個 JsonSerializerOptions.Web, 預設為駝峰命名策略。

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

結果:

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

Linq擴充套件方法CountBy和AggregateBy

CountBy,把key相同的進行相加,返回一個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);

執行結果:

Loremipsum dolor sit amet, consectetur adipiscing elit.Sednon risus. Suspendisse lectus tortor, dignissim sit amet,adipiscingnec, ultricies sed, dolor. Cras elementum ultrices amet diam.lorem:1ipsum:1dolor:2sit:2amet:3consectetur:1adipiscing:2elit:1sed:2non:1risus:1suspendisse:1lectus:1tortor:1dignissim:1nec:1ultricies:1cras:1elementum:1ultrices:1diam:1-------------------------amet:3-------------------------lorem:1

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: word => word.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:5ls:7ww:9