Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用API时将PHP数组转换为C#_C#_Php_Json - Fatal编程技术网

调用API时将PHP数组转换为C#

调用API时将PHP数组转换为C#,c#,php,json,C#,Php,Json,我已经在SO上查看了几个相关的示例,并尝试了许多方法来实现这一点,但每次尝试都会让我更加困惑 我试图通过Wordpress.org插件库API进行搜索,并从搜索结果中获得插件列表 终点是: 要传递的两个重要数据位是“action”和“search”。我现在感兴趣的操作是“query\u plugins”,并在请求中传递搜索字符串 这是一个PHP等价物: $payload = array( 'action' => 'query_plugins', 'request' => se

我已经在SO上查看了几个相关的示例,并尝试了许多方法来实现这一点,但每次尝试都会让我更加困惑

我试图通过Wordpress.org插件库API进行搜索,并从搜索结果中获得插件列表

终点是:

要传递的两个重要数据位是“action”和“search”。我现在感兴趣的操作是“query\u plugins”,并在请求中传递搜索字符串

这是一个PHP等价物:

$payload = array(
  'action' => 'query_plugins',
  'request' => serialize(
    (object)array(
        'search ' => 'search-phrase',
    )
  )
);
$body = wp_remote_post( 'http://api.wordpress.org/plugins/info/1.0/', array( 'body' => $payload) );
我能找到的唯一真正的文档来自于这篇博客文章(我从中获得了上述示例代码):

我正在使用RestSharp构建请求,代码如下:

var client = new RestClient("http://api.wordpress.org/");
var request = new RestRequest("plugins/info/1.0", Method.POST);

request.AddParameter("XXX", "XXX");

var response = client.Execute(request);
var content = response.Content;
上面的“request.AddParameter”(“XXX”,“XXX”);就是我遇到的问题。我需要用C#构建等价的PHP数组(并正确地序列化它?),以便API能够接受请求。我已经尝试了几种变体和组合,从原始到:

request.AddParameter("action", "query_plugins");
request.AddParameter("search", "keyword");
// and variants such as request.AddParameter("request", "[{ search: keyword }]);
我知道这是行不通的(但还是尝试了一下),使用带有操作和搜索参数的Dictionary(),并尝试以多种方式对其进行序列化(最近涉及的JsonConvert.SerializeObject)


在这一点上,我不知道我应该选择哪棵树,我有一种感觉,我甚至不知道我应该序列化为JSON、XML还是仅仅是字节流(据我所知,如果我没有弄错的话,PHP serialize()方法就是这样做的),我不确定打包请求中需要发送的所有数据的最佳方法。

这似乎有效。使用GET代替POST

请参见此处的工作示例。。


感谢您的回复,并对延迟的回复表示歉意。然而,无论您对AddParameter(“搜索”,“XXX”)使用什么,它似乎总是在.NET Fiddle中返回相同的响应。除非我遗漏了什么?我刚刚尝试了用“oauth”和“双因素”来处理“我得到了不同的回应。检查第一行,第二次搜索应该不同,我可以看到响应不同。此外,响应中的一些位是相似的,但插件列表是不同的
var client = new RestClient("http://api.wordpress.org/");
var request = new RestRequest("plugins/info/1.0", Method.GET);

request.AddParameter("action", "query_plugins");
request.AddParameter("search", "oauth");

var response = client.Execute(request);
var content = response.Content;