如何写" params"在C#中的JSON-RPC 2.0中?

时间:2017-06-27 20:50:22

标签: c# json json-rpc

我想使用JSON-RPC来控制名为aria2的应用程序。当它不需要参数时,我可以控制它。但是我尝试了很多方法,我从未用params控制它。

我尝试过的一些代码是这样的:

if (secret != null && secret != "")
    json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = { "token:" + secret, "[http://csharp.org/file.zip]" } });
else
    json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = @"[http://csharp.org/file.zip]" });

我也尝试过:

if (secret != null && secret != "")
    string json = "{\"jsonrpc\": \"2.0\",\"method\": \"aria2.addUri\",\"params\": {\"token:\"" + secret + "\",\"http://csharp.org/file.zip\"},\"id\": \"m\"}";
else
    string json = "{\"jsonrpc\": \"2.0\",\"method\": \"aria2.addUri\",\"params\": {\"http://csharp.org/file.zip\"},\"id\": \"m\"}";

我尝试了[{'"的许多组合和排列,但没有任何效果。

  

以下是关于Python的aria2的RPC指南:   https://aria2.github.io/manual/en/html/aria2c.html#rpc-authorization-secret-token

1 个答案:

答案 0 :(得分:1)

以下是一些初学者想要了解的解决方案。

  

首先,知道你想要输出什么,在这种情况下是:

{"jsonrpc":"2.0","id":"m","method":"aria2.addUri","params":["token:secret",["http://csharp.org/file.zip"]]}

结果在这里:http://jsoneditoronline.org/?id=4ee8fb1e0314e124bd3ab7d4b2ed19f1

然后,小提示[]超出了参数的值,因此它们是数组,而不是字符串。它无法使用["params"] = {},它也不会覆盖字符串到数组,例如,错误的代码:

JsonConvert.SerializeObject(new JObject { ["params"] = "[\"token:secret\", [\"http://csharp.org/file.zip\"]]" });

只得到:

{"params":"[\"token:secret\", [\"http://csharp.org/file.zip\"]]"}
  

最重要的是令牌的格式,它不是a   JProperty()中的JObject(),它只是params中的一个字符串   JArray()。而且uri也在params的JArray() JArray()中。所以   正确的版本是:

JArray param = new JArray { "token:secret", new JArray { "http://csharp.org/file.zip" } };
string json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = param });
  • JArray()[]JObject(){}; JArray()JObject()
  

如果我们不需要JsonConvert(),那么正确的版本很简单:

string json = "{ \"jsonrpc\": \"2.0\", \"id\": \"m\", \"method\": \"aria2.addUri\", \"params\": [\"token:secret\", [\"http://csharp.org/file.zip\"]] }";
  • 在这种情况下,我们无法将"更改为'