私は、クライアントのAPIに接続し、与えられたエンドポイントからクラスへの応答を収集するクラスライブラリを構築しています。言い換えれば、クライアントのDonutsエンドポイントにヒットし、JsonConvertを使用して、JSONオブジェクトの属性と一致するフィールドを持つDonutsクラスへのレスポンスを非直列化します。これはすべてうまくいいですが、エンドポイントがたくさんあり、同じコードを何度も何度も繰り返す方法がたくさんあります。 DRYnessと懸念の分離のために、私は、エンドポイントにかかわらず、残りの呼び出しを行うための別の名前空間を持ち、正しい結果をメインクラスに返します。ここでは(私はリクエストとレスポンスを設定するには、RestSharpを使用しています)それが今何をするかの例です:リスト<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文でだが、それですこの質問に実際には関係しません。私は複数のメソッドで同じコードを持っていますが、唯一の違いはList<Bagel>
、またはList<Cruller>
などです。私がしたいのは、このコードを独自のメソッドに抽出することですが、どうしたらよいかわかりません。今、私はList<object>
に逆シリアル化しようとしていて、後でList<Donut>
に変換しますが、それは私ができることではありません。私の他の考えは、パラメータ(public List<Donut> GetDonuts(string Endpoint)
)としてエンドポイント名を渡すことです、そして、どういうわけか、それが理にかなっていれば、どのタイプのオブジェクトを逆シリアル化するのかを判断するのですか? Anyhoo、誰かがこれを行うには良い方法についての洞察力を持っている場合、それは感謝されます!
EDIT
恐ろしい応答は、あなたの人々に感謝します。私は下のMatt Dillardの答えに従ってこのメソッドをリファクタリングしました。次のステップは、リストをリストに変換することです。上記のメソッドを呼び出す方法は、次のようになります。
public List<Donut> GetDonuts()
{
List<Donut> Results = new List<Donut>();
MODULE MakeCall = new GET();
return Results = MakeCall.Index("donuts")();
}
私のインテリセンスは、メソッドの型引数のMODULE.Index(文字列)の使用状況から推測することができない」と言われます、明示的に型引数を指定してみてください。 "私はそのようにキャストしようとしました:(リスト)MakeCall.Index( "ドーナツ")(); しかしそれはうまくいかなかった。これをキャストして、GetDonuts、GetCrullersなどのメソッドを持つことができるようにする方法はありますか? Bascially T
でDonut
へのすべての参照を置き換え
public List<T> GetStuff<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;
}
}
:
'List