Invio di JSON a URL tramite WebClient in C #

Ho del codice JavaScript che devo convertire in C #. Il mio codice JavaScript POST alcuni JSON a un servizio Web che è stato creato. Questo codice JavaScript funziona correttamente ed è simile al seguente:

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

Sto cercando di capire come convertire questo in C #. La mia app utilizza .NET 2.0. Da quello che posso dire, ho bisogno di fare qualcosa di simile al seguente:

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

Sono un po ‘bloccato a questo punto. Non sono sicuro di come dovrebbe essere json . Non sono sicuro di dover impostare il tipo di contenuto. Se lo faccio, non sono sicuro di come farlo. Ho visto anche UploadData . Quindi, non sono sicuro se sto usando il metodo giusto. In un certo senso, la serializzazione dei miei dati è un mio problema.

Qualcuno può dirmi cosa mi manca qui?

Grazie!

Hai bisogno di un serializzatore json per analizzare il tuo contenuto, probabilmente lo hai già fatto, per la tua domanda iniziale su come fare una richiesta, questa potrebbe essere un’idea:

  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 = <>; 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(); 

spero che sia d’aiuto,

La domanda ha già una risposta, ma penso di aver trovato la soluzione più semplice e più pertinente al titolo della domanda, eccolo qui:

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

Nell’esempio seguente viene illustrato come eseguire il POST di un JSON tramite il metodo WebClient.UploadString :

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

Prerequisiti: libreria Json.NET