[英]C# - How to handle similar data types when dealing with APIs
當某些API使用各種不同樣式的屬性名稱時,使用它們會令人沮喪。 這使我為相同類型的數據創建了許多不同的模型。 我想知道是否有處理這種情況的最佳實踐。
我開始調用API,然后返回以下列表:
{
"firstName": <value>
}
然后,我想將這些小部件之一添加到調度程序中,但這需要我發送dateTime戳記,因此我必須在帖子中發送它,這意味着我必須創建一個新模型,即使它只是一個附加屬性
{
"firstName": <value>
"dateUpdated": <date>
}
現在,此api將類似類型的列表發送給我(但帶有下划線):
{
"user_name": <value>
"date_updated": <value>
}
然后,我收到這樣的數據
{
"UserName": <value>
"DateUpdated": <value>
}
實在令人沮喪,因為我必須一直創建所有這些不同的模型。 更不用說我必須不斷地從一種轉換為另一種,最終在我的服務中到處都是這樣的轉換代碼:
var tempWidget = new Widget(){
firstName = returnedWidget.FirstName,
dateUpdated = returnedWidget.DateUpdated
}
return tempWidget
您可以使用Newtonsoft.Json.Linq中的JObject Class擺脫許多模型。
您可以嘗試為所需的字段創建一個模型和多個接口。 您仍然可以使用界面,但是添加界面要比觸摸模型輕得多,並且可以為所有字段保留一個位置。 您還將保留智能感知,而序列化可能不會。
public class ViewModel {
public string user_name {get;set;}
public date date_updated {get;
public string firstName {get;set;}
}
public interface IUserAndDate {
string user_name {get;set;}
date date_updated {get;set;}
}
public interface IFirstName{
string firstName {get;set;}
}
然后,您的方法可以接收適當的IFirstname或IUserAndDate,並將其強制轉換。
public void myhelper(IUserAndDate userandDate) {
....
}
someObject.myhelper(viewModel);
這是種隱藏的問題,但幾乎與獲取每個排列的自定義類一樣好。 我會警告不要過度使用。
您還可以探索適配器模式,在這種情況下,您可以對傳入的數據進行建模並將其規范化為單個模型。 無論如何,您可能仍然需要視圖模型來存儲預先轉換的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.