我正在構建一個連接到客戶端API的類庫,並將給定端點的響應收集到一個類中。換句話說,我將打到客戶端的Donuts端點,並使用JsonConvert將響應反序列化到我的Donuts類中,該類具有與JSON對象中的屬性相匹配的字段。這一切都很好,但它們有很多終結點,並且我有許多重複相同代碼的方法。爲了干涉和分離問題,我希望有一個獨立的命名空間,使剩下的呼叫,無論端點,並將正確的結果返回到主類。下面是它現在做什麼(我使用RestSharp配置請求和響應)的例子:如何將List <object>轉換爲列表<CustomClass>?
public List<T> Index<T>(string Endpoint)
{
List<T> Results = new List<T>();
RestClient Client = new RestClient();
RestRequest Req = ConfigureGetRequest(Endpoint);
IRestResponse Resp = Client.Execute(Req);
if (Resp.StatusCode == System.Net.HttpStatusCode.OK)
{
Results = JsonConvert.DeserializeObject<List<T>>(Resp.Content, DeserializationSettings);
}
return Results;
}
}
有if語句其他代碼(它實際上是一個if-else的錯誤處理),但它的與這個問題無關。我有多個方法相同的代碼,唯一的區別是它返回List<Bagel>
或List<Cruller>
,等等...我想要做的是將此代碼提取到它自己的方法,但我不知道如何。現在,我試圖反序列化到List<object>
,然後將其轉換爲List<Donut>
,但這似乎不是我能做的事。我的另一個想法是傳遞端點名稱作爲參數(public List<Donut> GetDonuts(string Endpoint)
),然後以某種方式使用它來確定要反序列化的對象的類型,如果有意義的話? Anyhoo,如果任何人有一個很好的方式來做到這一點,將不勝感激!
編輯
真棒回覆,謝謝你們。我根據馬特迪拉德的答案重構了這個方法。下一步是將列表轉換爲列表。調用該方法上面的方法是這樣的:
public List<Donut> GetDonuts()
{
List<Donut> Results = new List<Donut>();
MODULE MakeCall = new GET();
return Results = MakeCall.Index("donuts")();
}
我的智能感知告訴我「的類型參數的方法‘MODULE.Index(串)’不能從使用推斷嘗試指定類型參數明確。 」。我嘗試像這樣鑄造:(List)MakeCall.Index(「donuts」)(); 但這並沒有解決。有沒有一種方法可以讓我可以擁有方法GetDonuts,GetCrullers等等,它們都可以有效地調用Index?
如果你有一個'列表