亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# Newtonsoft 六個值得使用的特性(上)

 更新時間:2020年06月23日 10:21:48   作者:一線碼農(nóng)  
這篇文章主要介紹了c# Newtonsoft 六個值得使用的特性,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

一:講故事

看完官方文檔,閱讀了一些 Newtonsoft 源碼,對它有了新的認識,先總結(jié) 六個超經(jīng)典又實用的特性,同大家一起分享,廢話不多說,快來一起看看吧~~~

二:特性分析

1. 代碼格式化

如果你直接使用 JsonConvert.SerializeObject的話,默認情況下所有的json是擠壓在一塊的,特別不方便閱讀,如下所示:

 static void Main(string[] args)
 {
  var reportModel = new ReportModel()
  {
  ProductName = "法式小眾設(shè)計感長裙氣質(zhì)顯瘦純白色仙女連衣裙",
  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 提供數(shù)據(jù)的后端服務(wù),我相信你對手機流量這個詞特別敏感,往往一個 Model 上有十幾個字段,但需要傳給 App 可能就 三四個字段,這就造成了巨大的流量浪費,如下圖:

 static void Main(string[] args)
 {
  var reportModel = new ReportModel()
  {
  ProductName = "法式小眾設(shè)計感長裙氣質(zhì)顯瘦純白色仙女連衣裙",
  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 就用 蛇形,這樣顯得對別人友好一些,不是嘛😄😄😄,接下來看看怎么改造。

  • 駝峰命名 CamelCasePropertyNamesContractResolver
    var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented,
     new JsonSerializerSettings
      {
      ContractResolver = new CamelCasePropertyNamesContractResolver()
      });

  • 蛇形命名 SnakeCaseNamingStrategy
    var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented,
     new JsonSerializerSettings
     {
      ContractResolver = new DefaultContractResolver()
      {
      NamingStrategy = new SnakeCaseNamingStrategy()
      }
     });

4. 自定義屬性的名字

如果你和第三方系統(tǒng)進行過對接開發(fā),通常都會遇到這個問題,就拿 OpenTaobao 來說,我的Model總不能按照它文檔這樣定義吧,而且字段名稱也不可能做到完全一致,如下圖:

所以這里面必然要存在一個 Mapping 的過程,這就可以用 JsonProperty -> propertyName 幫你搞定,為了方便演示,我還是用 reportModel 吧。

 static void Main(string[] args)
 {
 var json = "{'title':'法式小眾設(shè)計感長裙氣質(zhì)顯瘦純白色仙女連衣裙','customercount':1000,'totalpayment':100.0,'productcount':10000}";

 var reportModel = JsonConvert.DeserializeObject<ReportModel>(json);
 }

 public class ReportModel
 {
 [JsonProperty("title")] public string ProductName { get; set; }
 [JsonProperty("customercount")] public int TotalCustomerCount { get; set; }
 [JsonProperty("totalpayment")] public decimal TotalPayment { get; set; }
 [JsonProperty("productcount")] public int TotalProductCount { get; set; }
 }

5. 對字段的 正向剔除 和 反向剔除

可能有些朋友對這兩個概念不是特別了解,這里我僅顯示 Model 中的 ProductName 為例講解一下:

  • 正向剔除: 默認所有都顯示,手工踢掉不顯示的,使用 MemberSerialization.OptOut 配合 JsonIgnore
     		static void Main(string[] args)
     {
      var reportModel = new ReportModel()
      {
      ProductName = "法式小眾設(shè)計感長裙氣質(zhì)顯瘦純白色仙女連衣裙",
      TotalPayment = 100
      };
    
      var json = JsonConvert.SerializeObject(reportModel, Formatting.Indented);
    
      System.Console.WriteLine(json);
     }
    
     [JsonObject(MemberSerialization.OptOut)]
     public class ReportModel
     {
     public string ProductName { get; set; }
     [JsonIgnore] public int TotalCustomerCount { get; set; }
     [JsonIgnore] public decimal TotalPayment { get; set; }
     [JsonIgnore] public int TotalProductCount { get; set; }
     }

  • 反向剔除: 默認都不顯示,手工指定要顯示的,使用 MemberSerialization.OptIn 配合 JsonProperty
     [JsonObject(MemberSerialization.OptIn)]
     public class ReportModel
     {
     [JsonProperty] public string ProductName { get; set; }
     public int TotalCustomerCount { get; set; }
     public decimal TotalPayment { get; set; }
     public int TotalProductCount { get; set; }
     }

6. 多個json 合并到 一個Model

這個特性當初打破了我對 Newtonsoft 的認知觀,不知道您呢? 通常我們都會認為 一個 json 對應(yīng)一個 model,一個 model 對應(yīng)一個 json,居然還可以多個 json 對應(yīng)一個 model 的情況,這就有意思了,場景大家可以自己想一想哈,這里使用 PopulateObject 方法就可以輕松幫你搞定,接下來看看怎么寫這個代碼:

 static void Main(string[] args)
 {
  var json1 = "{'ProductName':'法式小眾設(shè)計感長裙氣質(zhì)顯瘦純白色仙女連衣裙'}";
  var json2 = "{'TotalCustomerCount':1000,'TotalPayment':100.0,'TotalProductCount':10000}";

  var reportModel = new ReportModel();

  JsonConvert.PopulateObject(json1, reportModel);
  JsonConvert.PopulateObject(json2, reportModel);
 }

是不是有點意思😄😄😄

三:總結(jié)

為了怕影響閱讀體驗,這一篇就先總結(jié)六個供大家欣賞,Newtonsoft 這玩意確實非常強大,太多的東西需要去挖掘,希望本篇對你有幫助,謝謝。

以上就是c# Newtonsoft 六個值得使用的特性(上)的詳細內(nèi)容,更多關(guān)于c# Newtonsoft 特性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# 未將對象引用設(shè)置到對象的實例

    C# 未將對象引用設(shè)置到對象的實例

    c#開發(fā)過程中出現(xiàn)未將對象引用設(shè)置到對象的實例,錯誤一般是下面的原因,軟件中也是因為沒有獲取到數(shù)據(jù)導(dǎo)致,需要的朋友可以參考下
    2022-09-09
  • c#如何顯式實現(xiàn)接口成員

    c#如何顯式實現(xiàn)接口成員

    這篇文章主要介紹了c#如何顯式實現(xiàn)接口成員,幫助大家更好的利用c#處理接口,感興趣的朋友可以了解下
    2020-10-10
  • C# 中使用Stopwatch計時器實現(xiàn)暫停計時繼續(xù)計時功能

    C# 中使用Stopwatch計時器實現(xiàn)暫停計時繼續(xù)計時功能

    這篇文章主要介紹了C# 中使用Stopwatch計時器可暫停計時繼續(xù)計時,主要介紹stopwatch的實例代碼詳解,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#實現(xiàn)縮放和剪裁圖片的方法示例

    C#實現(xiàn)縮放和剪裁圖片的方法示例

    這篇文章主要介紹了C#實現(xiàn)縮放和剪裁圖片的方法,結(jié)合實例形式分析了C#針對圖片屬性的縮放、裁剪等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • C#實現(xiàn)漢字轉(zhuǎn)拼音或轉(zhuǎn)拼音首字母的方法

    C#實現(xiàn)漢字轉(zhuǎn)拼音或轉(zhuǎn)拼音首字母的方法

    這篇文章主要介紹了C#實現(xiàn)漢字轉(zhuǎn)拼音或轉(zhuǎn)拼音首字母的方法,涉及C#操作數(shù)組、遍歷及正則匹配的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解MongoDB for C#基礎(chǔ)入門

    詳解MongoDB for C#基礎(chǔ)入門

    本篇文章主要介紹了MongoDB for C#基礎(chǔ)入門,具體介紹了c#中關(guān)于對MongoDB的連接,插入,查詢等,有需要的可以了解一下。
    2016-12-12
  • C#隨機數(shù)生成字母金字塔

    C#隨機數(shù)生成字母金字塔

    這篇文章主要為大家詳細介紹了C#隨機數(shù)生成字母金字塔,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 使用HttpHanlder處理404:File not found的問題

    使用HttpHanlder處理404:File not found的問題

    本篇文章小編為大家介紹。使用HttpHanlder處理404:File not found的問題。需要的朋友參考下
    2013-04-04
  • C#中改變DataGridView控件邊框顏色的方法

    C#中改變DataGridView控件邊框顏色的方法

    這篇文章主要介紹了C#中改變DataGridView控件邊框顏色的方法,默認的DataGridView邊框顏色很丑,本文用編程方法實現(xiàn)修改DataGridView邊框顏色,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)截圖工具小項目

    C#實現(xiàn)截圖工具小項目

    這篇文章主要為大家詳細介紹了C#實現(xiàn)截圖工具小項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論