簡體   English   中英

將PHP數組轉換為C#

[英]Converting PHP array of arrays to C#

我正在為第三方API編寫一個C#客戶端(我使用的是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);

有沒有人知道如何將“標簽”字典轉換為與PHP的http_build_query等效的格式?

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函數的鏡面實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM