2013-02-26 17 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