一:讲故事
看完官方文档,阅读了一些 Newtonsoft
源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~
二:特性分析
1. 代码格式化
如果你直接使用 JsonConvert.SerializeObject
的话,默认情况下所有的json是挤压在一块的,特别不方便阅读,如下所示:
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; }
}
那怎么办呢? JsonConvert中提供了一个 Formatting.Indented
用来格式化json,这样在 debug 的过程中就非常友好,改造如下:
2. 踢掉没有被赋值的字段
如果你写过给 App 提供数据的后端服务,我相信你对手机流量这个词特别敏感,往往一个 Model 上有十几个字段,但需要传给 App 可能就 三四个字段,这就造成了巨大的流量浪费,如下图:
static void Main(string[] args)
{
var reportModel = new ReportModel()
{
ProductName = "法式小众设计感长裙气质显瘦纯白色仙女连衣裙",
TotalPayment = 100
};
var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented);
System.Console.WriteLine(json);
}
从图中可以看到,TotalCustomerCount
和 TotalProductCount
这两个字段就没必要了,Netnewsoft 中提供了 DefaultValueHandling.Ignore
剔除默认值的枚举,太实用了,改造如下:
var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented,
new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
3. 兼容其他语言的 驼峰,蛇形命名法
每一套编程语言都有各自偏好的命名法,比如 js 中都喜欢采用 驼峰命名法,在 mysql 中我见过最多的 蛇形命名法,而我们在 C# 中序列化的属性一般都是大写字母开头,比如你看到的 特性二
中的字段,那这里就存在问题了,有没有办法兼容一下,给 js 就用 驼峰,给 mysql 就用 蛇形,这样显得对别人友好一些,不是嘛