2013-02-26 57 views
59

我有一些JavaScript代码需要转换为C#。我的JavaScript代码将一些JSON发布到已创建的Web服务。此JavaScript代码工作正常,如下所示:通过WebClient在C中发布JSON到URL#

var vm = { k: "1", a: "2", c: "3", v: "4" }; 
$.ajax({ 
    url: "http://www.mysite.com/1.0/service/action", 
    type: "POST", 
    data: JSON.stringify(vm), 
    contentType: "application/json;charset=utf-8", 
    success: action_Succeeded, 
    error: action_Failed 
}); 

function action_Succeeded(r) { 
    console.log(r); 
} 

function log_Failed(r1, r2, r3) { 
    alert("fail"); 
} 

我想弄清楚如何将其转换为C#。我的应用程序使用.NET 2.0。从我可以告诉我,我需要做的事情如下:

using (WebClient client = new WebClient()) 
{ 
    string json = "?"; 
    client.UploadString("http://www.mysite.com/1.0/service/action", json); 
} 

我有点卡在这一点。我不知道json应该是什么样子。我不确定是否需要设置内容类型。如果我这样做,我不知道该怎么做。我也看到UploadData。所以,我不确定我是否使用了正确的方法。从某种意义上说,我的数据的序列化是我的问题。

有人能告诉我我在这里错过了什么吗?

谢谢!

回答

54

你需要一个JSON序列解析您的内容,也许你已经拥有了它, 您如何提出请求最初的问题,这可能是一个想法:

 var baseAddress = "http://www.mysite.com/1.0/service/action"; 

     var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress)); 
     http.Accept = "application/json"; 
     http.ContentType = "application/json"; 
     http.Method = "POST"; 

     string parsedContent = <<PUT HERE YOUR JSON PARSED CONTENT>>; 
     ASCIIEncoding encoding = new ASCIIEncoding(); 
     Byte[] bytes = encoding.GetBytes(parsedContent); 

     Stream newStream = http.GetRequestStream(); 
     newStream.Write(bytes, 0, bytes.Length); 
     newStream.Close(); 

     var response = http.GetResponse(); 

     var stream = response.GetResponseStream(); 
     var sr = new StreamReader(stream); 
     var content = sr.ReadToEnd(); 

希望它帮助,

+0

应该怎样 “parsedContent” 是什么样子?不幸的是,我需要在这种情况下手动创建我的JSON。谢谢。 – 2013-02-26 14:43:04

+0

它可以看起来像JSON吗?或者我需要做一些特殊的编码是我正在得到的。 – 2013-02-26 14:43:29

+0

@EelsFan通常不是选择任何JSON解析器的问题,您可以随时使用JSON.Net将.net对象解析为JSON,但根据我的经验,有一些云服务具有不同的JSON解析器版本,并且必须制作一些调整。做什么最适合你的场景,这个讨论可能会帮助你也看到一些没有JSON.Net的问题http://stackoverflow.com/questions/9573119/how-to-parse-json-without-json-net-library – 2013-02-26 14:58:10

137

的问题已经回答了,但我想我已经找到了解决方案,更简单,更相关的问题的标题,那就是:

var cli = new WebClient(); 
cli.Headers[HttpRequestHeader.ContentType] = "application/json"; 
string response = cli.UploadString("http://some/address", "{some:\"json data\"}"); 
+1

,让你的JSON ”可读“(在vb.net) 暗淡JSON = { “字段1”: “值1”, “状态”: “待定”, “objField”:{ “域2”:真 }} 的ToString – foxontherock 2016-03-15 12:59:56

41

下面的例子演示了如何通过POST一个WebClient.UploadString Method JSON:

var vm = new { k = "1", a = "2", c = "3", v= "4" }; 
using (var client = new WebClient()) 
{ 
    var dataString = JsonConvert.SerializeObject(vm); 
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); 
    client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString); 
} 

先决条件:Json.NET library

+2

我认为这应该是UploadStringAsync如果你正在使用已完成的事件 – 2015-01-22 13:38:11

+0

你可以省略'POST'作为'UploadString'作为默认值隐式使用这个方法,另外你可能想要添加'cli ent.Headers.Add(HttpRequestHeader.Accept,“application/json”);'如果你期望'JSON'作为返回。 – jimasun 2017-08-04 08:33:03