C# 如何在HttpWebRequest POST中将对象作为参数传递?

C# 如何在HttpWebRequest POST中将对象作为参数传递?,c#,asp.net,rest,httpwebrequest,C#,Asp.net,Rest,Httpwebrequest,在这里,我从我的web应用程序调用Restful WCF服务,我不知道如何在这个应用程序中将对象作为参数传递。这是我的客户代码: protected void Button1_Click(object sender, EventArgs e) { UserInputParameters stdObj = new UserInputParameters { AssociateRefId = "323", CpecialLoginId = "a@gma

在这里,我从我的web应用程序调用Restful WCF服务,我不知道如何在这个应用程序中将对象作为参数传递。这是我的客户代码:

protected void Button1_Click(object sender, EventArgs e)
{
    UserInputParameters stdObj = new UserInputParameters
    {
        AssociateRefId = "323",
        CpecialLoginId = "a@gmail.com",
        PartnerId = "aaaa",
        FirstName = "aaaa",
        LastName = "bbbb",
        Comments = "dsada",
        CreatedDate = "2013-02-25 15:25:47.077",
        Token = "asdadsadasd"
    };

    string url = "http://localhost:13384/LinkService.svc/TokenInsertion";

    try
    {
        ASCIIEncoding encoding = new ASCIIEncoding();
        System.Net.WebRequest webReq = System.Net.WebRequest.Create(url);
        webReq.Method = "POST";
        webReq.ContentType = "application/json; charset=utf-8";
        DataContractJsonSerializer ser = new DataContractJsonSerializer(stdObj.GetType());
        StreamWriter writer = new StreamWriter(webReq.GetRequestStream());
        writer.Close();
        webReq.Headers.Add("URL", "http://localhost:13381/IntegrationCheck/Default.aspx");
        System.Net.WebResponse webResp = webReq.GetResponse();
        System.IO.StreamReader sr = new System.IO.StreamReader(webResp.GetResponseStream());
        string s = sr.ReadToEnd().Trim();
    }
    catch (Exception ex)
    {
    }
}
我的服务方式是:

  public string UserdetailInsertion(UserInputParameters userInput)

您必须以该格式解析对象并将其写入RequestStream

你们班

[Serializable]
class UserInputParameters {
    "your properties etc"
};
用于序列化对象的代码

private void SendData(UserInputParameters stdObj) {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(stdObj.GetType());
    StreamWriter writer = new StreamWriter(webReq.GetRequestStream());
    JavaScriptSerializer jss = new JavaScriptSerializer();

    // string yourdata = jss.Deserialize<UserInputParameters>(stdObj);
    string yourdata = jss.Serialize(stdObj);
    writer.Write(yourdata);
    writer.Close();
}
private void SendData(UserInputParameters stdObj){
DataContractJsonSerializer ser=新的DataContractJsonSerializer(stdObj.GetType());
StreamWriter writer=newstreamwriter(webReq.GetRequestStream());
JavaScriptSerializer jss=新的JavaScriptSerializer();

//字符串yourdata=jss.Deserialize(stdObj); 字符串yourdata=jss.Serialize(stdObj); writer.Write(你的数据); writer.Close(); }
这应该是诀窍


JavaScriptSerializer
位于命名空间
System.Web.Script.Serialization
中,该命名空间可在程序集
System.Web.Extensions(在System.Web.Extensions.dll中)中找到
这里是MSDN文章:

我们不能使用C#中的WebRequest类从服务器端代码向远程服务器发送对象数据,因为我们只能向远程服务器发送流数据,而内存中的对象表示不是流。因此,在发送对象之前,我们需要将其序列化为流,然后才能将其发送到服务器远程服务器。下面是完整的代码

   namespace SendData
    {
      public class SendObjectData
        {
            static void Main(string[] args)
            {

              Employee emp = new Employee();
              emp.EmpName = "Raju";
              emp.Age = 30;
              emp.Profession = "Teacher";

              POST(emp);
            }

           // This method post the object data to the specified URL.
            public static void POST(Employee objEmployee)
            {
              //Serialize the object into stream before sending it to the remote server
                MemoryStream memmoryStream = new MemoryStream();
                BinaryFormatter binayformator = new BinaryFormatter();
                binayformator.Serialize(memmoryStream, objEmployee);

              //Cretae a web request where object would be sent
                WebRequest objWebRequest = WebRequest.Create(@"http://localhost/XMLProvider/XMLProcessorHandler.ashx");
                objWebRequest.Method = "POST";
                objWebRequest.ContentLength = memmoryStream.Length;
              // Create a request stream which holds request data
                Stream reqStream = objWebRequest.GetRequestStream();
             //Write the memory stream data into stream object before send it.
                byte[] buffer = new byte[memmoryStream.Length];
                int count = memmoryStream.Read(buffer, 0, buffer.Length);
                reqStream.Write(buffer, 0, buffer.Length);

             //Send a request and wait for response.
                try
                {
                    WebResponse objResponse = objWebRequest.GetResponse();
             //Get a stream from the response.
                    Stream streamdata = objResponse.GetResponseStream();
             //read the response using streamreader class as stream is read by reader class.
                    StreamReader strReader = new StreamReader(streamdata);
                    string responseData = strReader.ReadToEnd();
                }
                catch (WebException ex) {
                    throw ex;
                }

            }
        }
   // This is an object that needs to be sent. 
        [Serializable]
        public class Employee
        {

            public string EmpName { get; set; }
            public int Age { get; set; }
            public string Profession { get; set; }

        }
    }

您必须传递JSON字符串;)我改变了它,有很多方法可以替代序列化JavaScript,但这是我最喜欢的方法。我收到一个错误,比如最佳重载方法匹配在这行字符串yourdata=jss中有一些无效参数。反序列化(stdObj);字符串yourdata=jss.Deserialize(stdObj);应该是:string yourdata=jss.Serialize(stdObj);您在哪里使用从新DataContractJsonSerializer创建的“ser”变量…??使用json.NET或任何其他库将stdObj转换为json,并将其写入poststream(本例中为writer)