2022-02-24

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

紀錄一下一個之前跟其他廠商合作的需求,簡單的說因為我們常常對接 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