Newtonsoft 六個超簡單又實用的特性,值得一試 【上篇】
阿新 • • 發佈:2020-06-21
## 一:講故事
看完官方文件,閱讀了一些 `Newtonsoft` 原始碼,對它有了新的認識,先總結 六個超經典又實用的特性,同大家一起分享,廢話不多說,快來一起看看吧~~~
## 二:特性分析
### 1. 程式碼格式化
如果你直接使用 `JsonConvert.SerializeObject`的話,預設情況下所有的json是擠壓在一塊的,特別不方便閱讀,如下所示:
``` C#
static void Main(string[] args)
{
var reportModel = new ReportModel()
{
ProductName = "法式小眾設計感長裙氣質顯瘦純白色仙女連衣裙",
TotalPayment = 100,
TotalCustomerCount = 2,
TotalProductCount = 333
};
var json = JsonConvert.SerializeObject(reportModel);
System.Console.WriteLine(json);
}
}
public class ReportModel
{
public string ProductName { get; set; }
public int TotalCustomerCount { get; set; }
public decimal TotalPayment { get; set; }
public int TotalProductCount { get; set; }
}
```
![](https://img2020.cnblogs.com/other/214741/202006/214741-20200621085446066-582437900.png)
那怎麼辦呢? JsonConvert中提供了一個 `Formatting.Indented` 用來格式化json,這樣在 debug 的過程中就非常友好,改造如下:
![](https://img2020.cnblogs.com/other/214741/202006/214741-20200621085446387-1538776392.png)
## 2. 踢掉沒有被賦值的欄位
如果你寫過給 App 提供資料的後端服務,我相信你對手機流量這個詞特別敏感,往往一個 Model 上有十幾個欄位,但需要傳給 App 可能就 三四個欄位,這就造成了巨大的流量浪費,如下圖:
``` C#
static void Main(string[] args)
{
var reportModel = new ReportModel()
{
ProductName = "法式小眾設計感長裙氣質顯瘦純白色仙女連衣裙",
TotalPayment = 100
};
var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented);
System.Console.WriteLine(json);
}
```
![](https://img2020.cnblogs.com/other/214741/202006/214741-20200621085446590-6580309.png)
從圖中可以看到,`TotalCustomerCount` 和 `TotalProductCount` 這兩個欄位就沒必要了,Netnewsoft 中提供了 `DefaultValueHandling.Ignore` 剔除預設值的列舉,太實用了,改造如下:
``` C#
var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented,
new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
```
![](https://img2020.cnblogs.com/other/214741/202006/214741-20200621085446778-1185015251.png)
## 3. 相容其他語言的 駝峰,蛇形命名法
每一套程式語言都有各自偏好的命名法,比如 js 中都喜歡採用 駝峰命名法,在 mysql 中我見過最多的 蛇形命名法,而我們在 C# 中序列化的屬性一般都是大寫字母開頭,比如你看到的 `特性二` 中的欄位,那這裡就存在問題了,有沒有辦法相容一下,給 js 就用 駝峰,給 mysql 就用 蛇形,這樣顯得對別人友好一些,不是嘛