3

私のコードには、Bitcoin サーバーへの JSON リクエストを作成する関数があります。

public static JObject InvokeMethod(string sMethod, params object[] parameters)
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Url);
    webRequest.Credentials = Credentials;

    webRequest.ContentType = "application/json-rpc";
    webRequest.Method = "POST";

    JObject joe = new JObject();
    joe["jsonrpc"] = "1.0";
    joe["id"] = "1";
    joe["method"] = sMethod;

    if (parameters != null)
    {
        if (parameters.Length > 0)
        {
            JArray props = new JArray();
            foreach (var p in parameters)
            {
                props.Add(p);
            }
            joe.Add(new JProperty("params", props));
        }
    }

    string s = JsonConvert.SerializeObject(joe);
    [...]

私がそれを渡すときparameters

int minconf, int maxconf, List<string> addresses

いう

0, 9999, ["ms8G6E6J4no1KgRt9j3KyoniRgazRgDX1Q", "mzPs8fwypX8oiRGHjYHXMSbSoEdz1zgcAH"]

結果の文字列sは次のようになります。

"{"jsonrpc":"1.0","id":"1","method":"listunspent","params":[0,9999,"ms8G6E6J4no1KgRt9j3KyoniRgazRgDX1Q","mzPs8fwypX8oiRGHjYHXMSbSoEdz1zgcAH"]}"

サーバーが期待する文字列は次のようになります。

"{"jsonrpc":"1.0","id":"1","method":"listunspent","params":[0,9999,["ms8G6E6J4no1KgRt9j3KyoniRgazRgDX1Q","mzPs8fwypX8oiRGHjYHXMSbSoEdz1zgcAH"]]}"

(リストの周りの余分な括弧に注意してください)

シリアル化されたオブジェクトが目的の形式であることを確認するにはどうすればよいですか?

4

2 に答える 2

1

問題は、JArray に追加する List addresses パラメータにあると思います。

JArray (props) のサイズを確認すると、アドレスを追加する前はカウントが 2 で正しいのですが、アドレスが挿入された後は 4 になります。

[ 0, 9999, "ms8G6E6J4no1KgRt9j3KyoniRgazRgDX1Q", "mzPs8fwypX8oiRGHjYHXMSbSoEdz1zgcAH" ]

アドレスを複雑な型にラップして、それを引数として渡すことはできますか?

于 2013-09-26T02:19:13.457 に答える