J'ai le code C# suivant et je l'ai réutilisé environ 20x dans mon code. Je n'arrive pas à comprendre comment en faire un sous-programme qui me permettrait de le réutiliser b/c du type d'objet est basé sur une classe différente à chaque fois.Comment puis-je créer un sous-programme avec ce code C#?
Le but du code est d'envoyer une requête HTTP, de recueillir la réponse JSON, puis de sérialiser JSON (en utilisant un DataContract) dans une classe pour l'utiliser dans d'autres zones.
Voici ce que j'ai:
public static ResponseAttachmentIds MakeRequestAttachmentId(string requestUrl, string strToken)
{
try
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Headers["Authorization"] = "OAuth " + strToken;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception(String.Format(
"Server error (HTTP {0}: {1}).",
response.StatusCode,
response.StatusDescription));
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ResponseAttachmentIds));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ResponseAttachmentIds jsonResponse = objResponse as ResponseAttachmentIds;
response.Close();
return jsonResponse;
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
return null;
}
}
Les classes DataContract pour cette utilisation particulière sont:
public class ResponseAttachmentIds
{
[DataMember(Name = "done")]
public bool attachmentIds_done;
[DataMember(Name = "records")]
public List<ResponseAttachmentId> attachmentIds_records;
}
[DataContract]
public class ResponseAttachmentId
{
[DataMember(Name = "Id")]
public string attachmentId_strId { get; set; }
[DataMember(Name = "Image_Attachment_Id__c")]
public string attachmentId_strAttachmentId { get; set; }
}
Le problème est que j'ai aussi cette même configuration pour environ 20 différents classes comme ResponseImages
, ResponseProperties
, ResponseProperty
, etc.
Une aide?
En plus des réponses de Tony et Paul, je suggère que 'DataContractJsonSerializer' est assez limité. Vous pouvez vérifier Json Serializer de NewtonSoft (vous pouvez le trouver sur Nuget) –