最近在一個webapi2項目中遇到了一個問題:C#編碼規范中規定屬性的首字母是大寫的(大多數公司采用這種編碼風格),但是從其它系統中接收到的json對象的屬性卻是小寫的(大多數公司采用這種編碼風格),怎樣才能方便地完成轉換?
最粗暴的方法是定義一個所有屬性名為小寫的ViewModel類,然后再編寫相應的方法來完成大小寫屬性的轉換。
有沒有更加優雅的做法?
在webapi2,默認的json序列化組件是Newtonsoft.Json。怎樣才能讓Newtonsoft.Json在序列化的時候自動將大寫轉換成小寫,而在反序列化的時候自動轉換成大寫?查找文檔之后,發現使用JsonPropertyAtrribute即可。要使用JsonPropertyAtrribute,需要先引用命名空間Newtonsoft.Json。如下所示:
1 using Newtonsoft.Json; 2 3 /// <summary> 4 ///商品類。 5 /// </summary> 6 public class Product 7 { 8 /// <summary> 9 /// 商品Id 10 /// </summary> 11 [JsonProperty("productId")] 12 public string ProductId { set; get; } 13 14 15 /// <summary> 16 /// 商品名稱 17 /// </summary> 18 [JsonProperty("productName")] 19 public string ProductName { set; get; } 20 }
在代碼中,我們使用[JsonProperty("productId ")]來修飾ProductId屬性,productId為小寫,ProductId為大寫。在序列化和反序列的時候,Newtonsoft.Json會自動進行轉換。