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