只有累積,沒有奇蹟

2019年5月28日 星期二

[NETCore] ASP.NET Core 設定 JSON 序列化格式

前言
JSON.NET 是十分好用的套件,在 ASP.NET Core 1.0 開始內建 JSON.NET方便開發者快速使用,建立 ASP.NET Core 範本專案時會在  ConfigureServices  中的 addMVC 就可以開始使用,這篇介紹如何在 ASP.NET Core 中定義 JSON.NET 統一輸出格式的設定,若有問題歡迎留言一起討論。

範例代碼
首先建立 ASP.NET Core Web App 專案,使用範本專案中有的預設 Value Controller 並將其進行修改,將 Get 與 Get(id) API 修改為自訂的 UserInfo,下
  1. [HttpGet]
  2. public ActionResult<UserInfo> Get()
  3. {
  4. return new UserInfo()
  5. {
  6. Name = "Marcus",
  7. LoginTime = DateTime.Now.ToString(CultureInfo.CurrentCulture)
  8. };
  9. }
  10. [HttpGet("{id}")]
  11. public ActionResult<Dictionary<string, string>> Get(int id)
  12. {
  13. return new Dictionary<string, string>
  14. {
  15. { "Name", "Marcus" },
  16. { "LoginTime", DateTime.Now.ToString(CultureInfo.CurrentCulture) }
  17. };
  18. }
  19. public class UserInfo
  20. {
  21. public string Name { get; set; }
  22. public string LoginTime { get; set; }
  23. }
使用 Get 方法會回傳下列內容
  1. {
  2. "name": "Marcus",
  3. "loginTime": "2019/5/29 下午 09:26:51"
  4. }
另一個接口 Get 帶參數 id 的接口,使用自訂的 Dictionary 回傳內容
  1. {
  2. "Name": "Marcus",
  3. "LoginTime": "2019/5/29 下午 09:35:19"
  4. }
可以發現 Get 與 Get (id) 回傳的 Json 內容有些微差異,原因是因為在 ASP.NET Core 中回傳的 Json 元素預設會使用 駝峰式大小寫 (PascalCase) 中的 小駝峰式命名法,也就是第一個單字開頭會小寫,第二個單字為大寫,如果希望回傳的統一固定格式的話,可以在 ConfigureServices 加入  addJsonOptions  進行調整,在 MvcJsonOptions 中提供兩種方法 UseCamelCasing 與 UseMemberCasing 來設定 JSON 序列化的大小寫行為

設定方式
預設小寫 - Camel Case
在 AddJsonOptions 中提供 UseCamelCasing 方法設定輸出格式,帶統一為小寫,設定方式如下
  1. services.AddMvc()
  2. .AddJsonOptions(opt => opt.UseCamelCasing(true));
在重新執行一次 Get(id) API 原本輸出為大寫,調整設定之後就會變為小寫
  1. {
  2. "name": "Marcus",
  3. "loginTime": "2019/5/29 下午 22:26:51"
  4. }

預設大寫 - Pascal Case
在 AddJsonOptions 中使用 DefaultContractResolver 方法設定統一為大寫,設定方式如下
  1. services.AddMvc()
  2. .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
在重新執行一次 Get(id) API 輸出調整設定之後就會統一變為大寫
  1. {
  2. "Name": "Marcus",
  3. "LoginTime": "2019/5/29 下午 23:16:11"
  4. }


Json.Net
JSON.NET 從 ASP.NET Core 中就存在,但從 ASP.NET Core 3.0 開始將不會在內建 JSON.NET,會提供一組新的 Json API 提供給開發者使用,命名空間為 System.Text.Json,詳細細節可以參考 Announcing .NET Core 3.0 Preview 5 ,日後若有機會也會試試看 :)


參考

Related Posts:

  • [NETCore] 使用 Dotnet Watch 自動編譯 ASP.NET Core 應用程式前言 在開發完代碼的時候,為了確保代碼在應用程式執行的狀況,會在 Visual Studio IDE 使用偵錯模式 F5 或是 Ctrl+F5 進行偵錯,如果執行狀況不如預期時就會關閉偵錯,重新修改代碼在編譯再重新進行偵錯,簡單來說流程像是  改 Code > 編譯 Ctrl + Shift + B > 測試 F5 or Ctrl + F5 > 不如預期 > 改 Code  ,仔細想… Read More
  • [NETCore] 移除未使用的 ASP.NET Core SDK問題  最近電腦一直跳出硬碟空間不足訊息提示,在清理硬碟的空間過程中發現電腦安裝多個版本的 ASP.NET Core SDK,身為一位專案自以為跟上技術潮流的開發人員這種狀況應該常遇到,用硬碟的空間來換取跟上潮流的速度是合情合理,但由於公司筆電硬碟空間有限口袋空空也是很苦惱,這篇文章就針對此問題的解決方式做簡單分享,若是有不清楚或是錯誤的地方歡迎討論予糾正。 解決方案 最直覺的解決方式是透過控制台應用程式,在逐步的點選每一項進行解… Read More
  • [.NETCore] Windows 如何更新環境變數 Environment Variable問題 在上一篇 ASP.NET Core - ENVIRONMENT 提到可以設定環境變數  ASPNETCORE_ENVIRONMENT  ,然後代碼中可以依據所設定的環境變數作相對應的邏輯處理,舉例來說如果是 Production 環境的話就關閉錯誤訊息畫面、產生系統監控...等行為,一般來說設定完環境變數 Environment Variable 都需要重啟電腦讓設定值生效,但是如果在 Pr… Read More
  • [NETCore] Polly 重試機制搭配 jitter 策略Jitter 策略 上一篇 [NETCore] 使用 Polly 實現重試 (Retry) 策略 分享了使用 Polly 的重試 API 幫助我們達到重試的功能,後續在尋找相關文件時看到重試時的一種策略 Jitter strategy,在高併發的情境下如果使用重試策略可能會影響到系統,若要解決用戶端因為同時間重試造成伺服器資源高峰的狀況,可以透過添加隨機時間來改善,另外在 Jitter: Making Things Bette… Read More
  • [NETCore] ASP.NET Core 設定 JSON 序列化格式前言 JSON.NET 是十分好用的套件,在 ASP.NET Core 1.0 開始內建 JSON.NET方便開發者快速使用,建立 ASP.NET Core 範本專案時會在  ConfigureServices  中的 addMVC 就可以開始使用,這篇介紹如何在 ASP.NET Core 中定義 JSON.NET 統一輸出格式的設定,若有問題歡迎留言一起討論。 範例代碼 首先建立 ASP.NET C… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com