C# 如何在查询字符串中传递json?

C# 如何在查询字符串中传递json?,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我试图通过使用Jquery.param将JSON编码到URI中来向服务器发送JSON,但我得到了以下错误 window.location.href = BriefExportPath+$.param(JSON.stringify({ title: $('.ui-dialog-title').text(), items: ko.utils.arrayMap(Neptune.BriefCountrySec

我试图通过使用Jquery.param将JSON编码到URI中来向服务器发送JSON,但我得到了以下错误

window.location.href = BriefExportPath+$.param(JSON.stringify({
                        title: $('.ui-dialog-title').text(),
                        items: ko.utils.arrayMap(Neptune.BriefCountrySection.SelectedCountries(), function (item) {
                            return item.ItemName
                        })
                    }))



[CustomAuthorize(Definitions.RoleSonarAdmin)]
        public FileContentResult ExportCsv(string json)
        {
            var x = new System.Web.Script.Serialization.JavaScriptSerializer();
            object obj = x.DeserializeObject(json);
            //return File(Helpers.BriefCsvBytes.GetCsvBytes(items), "text/csv", title); 
            return null;
        }



http://dev.neptune.local/Briefs/ExportCsv?0=%7B&1=%22&2=t&3=i&4=t&5=l&6=e&7=%22&8=%3A&9=%22&10=B&11=r&12=i&13=e&14=f&15=+&16=C&17=o&18=u&19=n&20=t&21=r&22=y&23=+&24=L&25=i&26=s&27=t&28=%22&29=%2C&30=%22&31=i&32=t&33=e&34=m&35=s&36=%22&37=%3A&38=%5B&39=%22&40=A&41=f&42=r&43=i&44=c&45=a&46=%22&47=%2C&48=%22&49=A&50=m&51=e&52=r&53=i&54=c&55=a&56=s&57=%22&58=%2C&59=%22&60=A&61=s&62=i&63=a&64=%22&65=%2C&66=%22&67=E&68=u&69=r&70=o&71=p&72=e&73=%22&74=%5D&75=%7D

为什么不使用此选项

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

而不是查询字符串。

您的服务器希望输入在某个地方以一个可预测的变量名结束,但您似乎尝试将其放入名为
0
的GET变量中,正如我们在
ExportCsv?0=

您的代码期望的是
ExportCsv?json=

确保您正在将值传递给以下各项的手册中正确的GET变量名

创建数组或对象的序列化表示形式,适合在URL查询字符串或Ajax请求中使用

您正在向它传递
JSON.stringify
的返回值,它是一个字符串

您需要为其传递一个对象:

var json = JSON.stringify(etc etc);
var url = BriefExportPath + $.param( { "json": json } );
location = url;

然后,您的服务器端代码将需要从
json
query键提取数据。

在将数据添加到querystring之前,您是否使用-json.stringify(data)?是的,请查看更新。您是否尝试过使用HttpUtility.UrlDecode()重要的一行肯定在579之前。
json
变量是在哪里分配的?看起来querystring参数名是错误的。从屏幕截图上看,它看起来像是“0”,因为我正在从服务器返回一个文件。在这种情况下,为什么不更改contentType以匹配您返回的文件类型?@TimothyGroote-如果通过
.ajax
请求文件,这会有什么帮助?是什么让您认为服务器端代码发出了错误的内容类型呢?
$。ajax的不同之处在于它通过异步进程检索信息。即使使用
$.ajax
,您也可以请求文件下载。此外,在发表评论时,我没有指示服务器将返回哪种类型的文件,它将自动分配给0。那么,我们至少可以看到应该捕获GET变量值的代码吗?我还使用了“var oo=xx.Deserialize(json);”而不是“反序列化对象()”,所以我不知道;不必在代码中处理数组。只需确保json属性名与对象名匹配即可。我不必列出所有的财产,只是我想填写的那些。
var jObj = (JObject)JsonConvert.DeserializeObject(json);