C# 我如何用这个C代码生成一个子程序?

C# 我如何用这个C代码生成一个子程序?,c#,json,rest,datacontractserializer,C#,Json,Rest,Datacontractserializer,我有下面的C#代码,我在代码中重复使用了大约20次。我不知道如何把它变成一个子程序,允许我重复使用它。b/c类型的对象每次都基于不同的类 代码的目的是发送一个HTTP请求,收集JSON响应,然后将JSON(使用DataContract)序列化到一个类中,以便在其他区域使用 以下是我得到的: public static ResponseAttachmentIds MakeRequestAttachmentId(string requestUrl, string strToken)

我有下面的C#代码,我在代码中重复使用了大约20次。我不知道如何把它变成一个子程序,允许我重复使用它。b/c类型的对象每次都基于不同的类

代码的目的是发送一个HTTP请求,收集JSON响应,然后将JSON(使用DataContract)序列化到一个类中,以便在其他区域使用

以下是我得到的:

    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;
        }

    }
此特定用途的DataContract类包括:

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; }
}
公共类响应附件ID
{
[DataMember(Name=“done”)]
公共图书馆附件已完成;
[DataMember(Name=“records”)]
公共列表附件记录;
}
[数据合同]
公共类ResponseAttachmentId
{
[数据成员(Name=“Id”)]
公共字符串attachmentId_strId{get;set;}
[DataMember(Name=“Image\u Attachment\u Id\u c”)]
公共字符串attachmentId_strAttachmentId{get;set;}
}
问题是,我还为大约20个不同的类设置了相同的设置,比如
ResponseImages
ResponseProperties
ResponseProperty
,等等


有什么帮助吗?

我相信您需要的是一种通用方法:

public static T MakeRequestAttachmentId<T>(string requestUrl, string strToken) where T : class
    {
        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(T));
                object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
                var jsonResponse = (T)objResponse;
                response.Close();
                return jsonResponse;
            }
        }
        catch (Exception e)
        {
            System.Windows.Forms.MessageBox.Show(e.Message);
            return default(T);
        }

    }
public static T MakeRequestAttachmentId(字符串requestUrl,字符串stroken),其中T:class
{
尝试
{
HttpWebRequest-request=WebRequest.Create(requestUrl)作为HttpWebRequest;
请求头[“授权”]=“OAuth”+strToken;
使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse)
{
if(response.StatusCode!=HttpStatusCode.OK)
抛出新异常(String.Format)(
“服务器错误(HTTP{0}:{1})。”,
response.StatusCode,
响应(状态描述);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(类型(T));
object objResponse=jsonSerializer.ReadObject(response.GetResponseStream());
var jsonResponse=(T)objResponse;
response.Close();
返回jsonResponse;
}
}
捕获(例外e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
返回默认值(T);
}
}
你可以这样称呼它:

MakeRequestAttachmentId<ResponseAttachmentIds>("", "");
MakeRequestAttachmentId(“,”);

我相信您需要的是一种通用方法:

public static T MakeRequestAttachmentId<T>(string requestUrl, string strToken) where T : class
    {
        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(T));
                object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
                var jsonResponse = (T)objResponse;
                response.Close();
                return jsonResponse;
            }
        }
        catch (Exception e)
        {
            System.Windows.Forms.MessageBox.Show(e.Message);
            return default(T);
        }

    }
public static T MakeRequestAttachmentId(字符串requestUrl,字符串stroken),其中T:class
{
尝试
{
HttpWebRequest-request=WebRequest.Create(requestUrl)作为HttpWebRequest;
请求头[“授权”]=“OAuth”+strToken;
使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse)
{
if(response.StatusCode!=HttpStatusCode.OK)
抛出新异常(String.Format)(
“服务器错误(HTTP{0}:{1})。”,
response.StatusCode,
响应(状态描述);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(类型(T));
object objResponse=jsonSerializer.ReadObject(response.GetResponseStream());
var jsonResponse=(T)objResponse;
response.Close();
返回jsonResponse;
}
}
捕获(例外e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
返回默认值(T);
}
}
你可以这样称呼它:

MakeRequestAttachmentId<ResponseAttachmentIds>("", "");
MakeRequestAttachmentId(“,”);

我会将该方法更改为使用泛型。类似于

public static T MakeResponseObject<T>(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(T));
            object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
            var jsonResponse = objResponse as T;
            response.Close();
            return jsonResponse;
        }
    }
    catch (Exception e)
    {
        System.Windows.Forms.MessageBox.Show(e.Message);
        return null;
    }
}
publicstatict MakeResponseObject(字符串requestUrl,字符串strToken)
{
尝试
{
HttpWebRequest-request=WebRequest.Create(requestUrl)作为HttpWebRequest;
请求头[“授权”]=“OAuth”+strToken;
使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse)
{
if(response.StatusCode!=HttpStatusCode.OK)
抛出新异常(String.Format)(
“服务器错误(HTTP{0}:{1})。”,
response.StatusCode,
响应(状态描述);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(类型(T));
object objResponse=jsonSerializer.ReadObject(response.GetResponseStream());
var jsonResponse=objResponse as T;
response.Close();
返回jsonResponse;
}
}
捕获(例外e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
返回null;
}
}

我会将该方法更改为使用泛型。类似于

public static T MakeResponseObject<T>(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(T));
            object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
            var jsonResponse = objResponse as T;
            response.Close();
            return jsonResponse;
        }
    }
    catch (Exception e)
    {
        System.Windows.Forms.MessageBox.Show(e.Message);
        return null;
    }
}
publicstatict MakeResponseObject(字符串requestUrl,字符串strToken)
{
尝试
{
HttpWebRequest-request=WebRequest.Create(requestUrl)作为HttpWebRequest;
请求头[“授权”]=“OAuth”+strToken;
使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse)
{
if(response.StatusCode!=HttpStatusCode.OK)
抛出新异常(String.Format)(
“服务器错误(HTTP{0}:{1})。”,
response.StatusCode,
响应(状态描述);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(类型(T));
object objResponse=jsonSerializer.ReadObject(response.GetResponseStream());
var jsonResponse=objResponse as T;
response.Close();
返回jsonResponse;
}
}
捕获(例外e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
返回null;
}
}

除了Tony&Paul的答案之外,我建议使用
DataContractJsonSerializer<