2016-12-31 4 views
1

Я хочу, чтобы отправить запрос POST в C# и я понадоблюсь следующим отправлен черезC# POST запрос с массивами отправки

"jsonrpc": "2.0", 
"id": "12345", 
"method": "my method", 
"params": { 
    "api_key": "my api key", 
    "preset_id": "my preset id" 
} 

Я попытался с помощью

using (WebClient client = new WebClient()) 
    { 
     byte [] response = 
     client.UploadValues ("my url", new NameValueCollection() 
     { 
      { "jsonrpc", "2.0" }, 
      { "id", "12345"}, 
      { "method", "my method"}, 
      { "params", ""} 
     }); 
     string result = System.Text.Encoding.UTF8.GetString (response); 
    } 

Но я не смог сделать Params массив, пожалуйста, помогите, спасибо

+1

Возможный дубликат [POSTING JSON для URL через WebClient в C#] (http://stackoverflow.com/questions/15091300/posting-json-to-url-via-webclient-in-c-sharp) – CodingYoshi

+0

@CodingYoshi Не совсем, моя проблема исходит из того, что я могу иметь параметры как массив. И решение, которое вы отправили, также не использует массивы. Спасибо за попытку –

ответ

0

Похоже, вы просите параметры быть в массиве, но они фактически показаны как «подкласс». Если значения были в массиве, они должны иметь квадратные скобки вокруг них.

Однако оба результата легко добиться с помощью анонимных (или реальных) классов (которые я предпочитаю более встраивание имен свойств в цитируемом тексте (делает будущие модификации гораздо проще реализовать).

 var parameters = new 
         { 
          api_key = "my api key", 
          preset_id = "my preset id" 
         }; 

     var json = new 
        { 
         jsonrpc = "2.0", 
         id = "12345", 
         method = "my method", 
         @params = parameters 
        }; 
     string sResult = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(json); 

. приведенный выше код приведет к тому же выходу, что вы показали, если вы хотите реальный массив вместо этого, вы можете изменить определение параметров для:

 var parameters = new NameValueCollection(); 
     parameters.Add("api_key", "my api key"); 
     parameters.Add("preset_id", "my preset id"); 

Обратите внимание, что я использовал .Net Framework JSon сериалайзер (из системы. Web.Extensions), но вы можете использовать сериализатор по вашему выбору (мы обычно используем JsonConvert от NewtonSoft).