前後端溝通 naming conversion 轉換需要知道的事
阿新 • • 發佈:2021-06-12
c# 是 pascal case, js 是 camel case 所以在做 web api 和 odata 的時候經常需要轉換.
早年 web api 是依賴 Newtonsoft json (JSON.NET) 的, 所以我們常看見
[JsonProperty(propertyName: "name_cn")] public string Name { get; set; } = "";
或者
[DataMember(Name = "name_cn")] public string Name { get; set; } = "";
2 個都可以用, data member 是微軟自己的, 好像是 wcf 帶下來的. JsonProperty 是 newton 的.
而 newton 也會去讀 data member 所以就通用了.
後來微軟不依賴 newton 了, 改成了System.Text.Json
就用了後來的
[JsonPropertyName("name_cn")] public string Name { get; set; } = "";
所以現在的話,應該是用 JsonPropertyName 就對了
那麼 odata 從來就不是用 newton 的, 所以不支援 JsonProperty
現在呢, 它視乎也沒有要支援 System.Text.Json, 所以也是不可以用 JsonPropertyName
有個 feature request : https://github.com/OData/WebApi/issues/2174
那麼, odata 可以 2 種做法.
1 就是用 DataMember, 這個是微軟的嘛, 而已 odata 和 wcf 靠很近.
2.就是在 builder 的時候直接改.
https://stackoverflow.com/questions/42016069/how-to-query-odata-while-using-alternate-property-names
https://docs.microsoft.com/en-us/odata/webapi/convention-model-builder