Newtonsoft JSON - 数组序列化不正确

3
在我的代码中,有一个函数用于创建向比特币服务器发送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"]]}"

如何确保序列化的对象符合我想要的格式?(注意列表周围的额外括号)

2个回答

2
修改你的foreach循环如下:
        foreach (var p in parameters)
        {
            if (p.GetType().IsGenericType && p is IEnumerable)
            {
                JArray l = new JArray();
                foreach (var i in (IEnumerable)p)
                {
                    l.Add(i);
                }
                props.Add(l);
            }
            else
            {
                props.Add(p);
            }
        }

1
我认为问题出在您想要添加到JArray中的List addresses参数上。
如果您检查JArray(props)的大小,您会发现在添加地址之前,计数为2,这是正确的,而在插入地址后,它变成了4。
[ 0, 9999, "ms8G6E6J4no1KgRt9j3KyoniRgazRgDX1Q", "mzPs8fwypX8oiRGHjYHXMSbSoEdz1zgcAH" ]
您能否将地址包装成复杂类型,并将其作为参数传递?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接