Json.Net進行序列化物件後的屬性更名

前陣子在網路上看到某程式設計師為了要讓輸出JSON的屬性符合他想要的定義,進而採用C#的關鍵字當作屬性名稱的爭議,覺得這事情有這麼固執嗎?隨便翻了一下JOSN.NET,果然這種想像中的事情人家早就支援了。

利用JsonPropertyAttribute來輕鬆完成

Step 1. 假設有一個ORM物件如下,但我們不滿意他將被輸出JSON格式的屬性名稱,因此建立屬性描述如下:

public class ORM
{
  [JsonProperty("cAliasName")]
  public string cName { get; set; }
  [JsonProperty("iAliasMoney")]
  public int iMoney { get; set; }
}

Step 2. 回到Main Console測試一下:

ORM oTest = new ORM() { cName = "john", iMoney = 99999 };
Console.WriteLine(JsonConvert.SerializeObject(oTest, Formatting.Indented));

當ORM類別沒有附掛屬性時輸出:

{
  "cName": "john",
  "iMoney": 99999
}

當ORM類別附掛屬性時輸出:

{
  "cAliasName": "john",
  "iAliasMoney": 99999
}

最後想對那位不知名的程式設計師說:「施主!何苦執著啊~轉個念頭豈不輕鬆乎?」就算退後一萬步沒有JsonPropertyAttribute,宣告個匿名型別(AnonymousType)包皮後在網外丟不也到達一樣的效果嗎?

相關參考

Json.Net輸出合約實作:將資料物件中某些欄位動態隱藏,不進行序列化

Newtonsoft.Json JsonConvert.SerializeObject ClassProperty ORMProperties JSON ChangePropertyName ModifyPropertiesName