Преобразование массива массивов PHP в C #

Я пишу клиент C # для стороннего API (я использую пакет RestSharp nuget). В их документации содержатся примеры PHP, которые я должен перевести на C #. Большинство их образцов достаточно просты, и я смог преобразовать их в C #, но я борюсь с одним из них, потому что он принимает массив массивов. Вот пример из их документации:

$params = array ( 'user_key' => 'X', 'client_id'=> 'X, 'label' => array( array( 'language' => 'en_US', 'name' => 'English label', ), array( 'language' => 'fr_CA', 'name' => 'French label', ), ), ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.3rdparty.com/xxx/yyy'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('apikey: YOURAPIKEY')); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); 

Вот что я до сих пор:

 var labels = new Dictionary<string, string>() { { "en_US", "English Label" }, { "fr_CA", "French Label" } }; var request = new RestRequest("/xxx/yyy", Method.POST) { RequestFormat = DataFormat.Json }; request.AddHeader("apikey", myApiKey); request.AddParameter("user_key", myUserKey); request.AddParameter("client_id", myClientId); request.AddParameter("label", ???); var client = new RestSharp.RestClient("https://api.3rdparty.com") { Timeout = timeout, UserAgent = "My .NET REST Client" }; var response = client.Execute(request); 

Кто-нибудь знает, как преобразовать словарь меток в формат, который будет эквивалентен http_build_query PHP?

http_build_query($params) производит вывод, который выглядит следующим образом:

 user_key=X&client_id=X&label%5B0%5D%5Blanguage%5D=en_US&label%5B0%5D%5Bname%5D=English+label&label%5B1%5D%5Blanguage%5D=fr_CA&label%5B1%5D%5Bname%5D=French+label 

Который, декодированный, выглядит так:

 user_key=X&client_id=X&label[0][language]=en_US&label[0][name]=English label&label[1][language]=fr_CA&label[1][name]=French label 

Итак, вы должны уметь:

  var request = new RestRequest("/xxx/yyy", Method.POST); request.AddHeader("apikey", myApiKey); request.AddParameter("user_key", myUserKey); request.AddParameter("client_id", myClientId); foreach (var item in labels.Select((pair, i) => new { index = i, language = pair.Key, name = pair.Value })) { request.AddParameter(string.Format("label[{0}][language]", item.index), item.language); request.AddParameter(string.Format("label[{0}][name]", item.index), item.name); } 

Обратите внимание, что из экспериментов я заметил, что RestSharp кодирует пространство как %20 а не как + . Надеюсь, это не проблема .

Вы можете использовать HttpBuildQuery, который является зеркальной реализацией этой функции PHP.