将PHP数组转换为C#

时间:2015-04-23 19:56:32

标签: c# php json.net restsharp

我正在为第三方API编写C#客户端(我正在使用RestSharp nuget包)。他们的文档包含PHP示例,我必须将其转换为C#。他们的大多数样本都很简单,我已经能够将它们转换为C#,但我正在努力解决其中一个问题,因为它接受了一组数组。以下是他们文档中的示例:

#passenger_base_uri /app_name

这是我到目前为止所拥有的:

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

有人知道如何将“标签”字典转换为与PHP的http_build_query等效的格式吗?

2 个答案:

答案 0 :(得分:2)

foo()生成如下所示的输出:

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

请注意,从实验中,我注意到RestSharp将空格编码为 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); } 而不是%20。希望not a problem

答案 1 :(得分:-1)

您可以使用HttpBuildQuery,即PHP函数的镜面实现。