[C#] 物件輸出的 JSON 按照 Property Name 排序的兩種方法

2022-02-24

紀錄一下一個之前跟其他廠商合作的需求,簡單的說因為我們常常對接 API 的時候是透過 JSON 

對方不一定是微軟的系統,我們要確定彼此的資料是正確的,很簡單就是直接做 checksum 

但是 JSON 這時候第一層的 Propery Name 如果順序不一樣就將無法用同一個方法進行  checksum

這時候就有一個需求,就是將 輸出的 JSON 給排序,只需要第一層的就可以了。




1. 先介紹一下今天要用的物件 User.cs


2. 第一層順序並沒有按照順序寫,我相信大家不會沒事開物件的時候都是按照順序寫的,沒有這麼細節控

這時候我們直接 JSON.net 輸出成 JSON 會長這樣


這裡面並沒有按照順序,只會按照你寫的時候的順序。

3. 方法1 : 先轉成 JObject 後進行排序,這裡面有一行我註解掉了,原因是因為如果你需要針對第二層的話再打開


4. 方法2: 先轉成 ExpandoObject 排序後再輸出



這兩種方法都可以只是一個先轉成 JObject 還有一個就是  ExpandoObject 其實概念上不變使用的物件不同。

最近有要用到翻了以前的 code 記錄一下。

reference:

https://stackoverflow.com/questions/3330989/order-of-serialized-fields-using-json-net



當麻許的超技八 2014 | Donma Hsu Design.