POSTING JSON para URL via WebClient em c #

Eu tenho algum código JavaScript que eu preciso converter em c #. Meu código JavaScript envia alguns JSON para um serviço da Web que foi criado. Este código JavaScript funciona bem e se parece com o seguinte:

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

Eu estou tentando descobrir como converter isso em c #. Meu aplicativo está usando o .NET 2.0. Pelo que posso dizer, preciso fazer algo como o seguinte:

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

Estou um pouco preso neste momento. Eu não tenho certeza do que json deve ser. Não tenho certeza se preciso definir o tipo de conteúdo. Se eu fizer, não sei como fazer isso. Eu também vi UploadData . Então, não tenho certeza se estou usando o método correto. De certo modo, a serialização dos meus dados é um problema meu.

Alguém pode me dizer o que estou sentindo falta aqui?

Obrigado!

Você precisa de um serializador json para analisar seu conteúdo, provavelmente você já o tem, para sua pergunta inicial sobre como fazer uma solicitação, isso pode ser uma ideia:

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

espero que ajude,

A questão já está respondida, mas acho que encontrei a solução mais simples e mais relevante para o título da questão, aqui está:

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

O exemplo a seguir demonstra como POSTAR um JSON por meio do método 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); } 

Pré-requisitos: biblioteca Json.NET