簡體   English   中英

C#-處理API時如何處理類似的數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM