1. 程式人生 > 其它 >前後端溝通 naming conversion 轉換需要知道的事

前後端溝通 naming conversion 轉換需要知道的事

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