我現在正在制作一個 API 來接受第三方令牌資訊并將其存盤到資料庫中。類定義如下:
public class ThirdPartyBaseToken
{
[JsonProperty("accessToken")]
public virtual string AccessToken { get; set; }
[JsonProperty("brand")]
public virtual string Brand { get; set; }
}
控制器中的 API 如下:
public async Task<IActionResult> SaveTokenAsync([FromBody]ThirdPartyBaseToken tokenBody)
{
var request = new SavingRequest
{
ThirdPartyToken = tokenBody.AccessToken,
……
……
};
await backendService.SaveAsync(request);
return this.StatusCode(201);
}
但是我遇到了一些例外,經過調查,我發現一些第三方的屬性名稱是“accessToken”,而其他的則是“openToken”。在這種情況下,我創建了一個從基類繼承的子類并覆寫 JsonProperty,如:
public class ThirdPartyChildToken: ThirdPartyBaseToken
{
[JsonProperty("openToken")]
public override string AccessToken { get; set; }
}
我希望一旦“openToken”屬性出現,API 可以接受它并從 AccessToken 正確獲取令牌資訊。不幸的是,我在本地除錯,發現 AccessToken 仍然為空,這意味著 JsonProperty("openToken") 不起作用。
有人可以給我一些解決問題的說明嗎?
uj5u.com熱心網友回復:
我覺得從設計的角度來看,最好保持屬性名稱與 JSON 屬性名稱匹配的約定。因此,您可以添加這兩個屬性,然后檢查哪一個不為空。
public string GetToken()
=> this.AccessToken ?? this.OpenToken ?? throw new Exception("Token is null.");
此約定還有一個優點,即您不必[JsonProperty]明確指定每個屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322266.html
