从字符串反序列化json

时间:2013-07-18 06:54:39

标签: asp.net json jquery asp.net-mvc-4

我有一个动态构建表单,从文本文件构建,所以我事先不知道变量的名称。我已将表单和值序列化为json字符串:

"PersonId=aasd&Gender=Kvinna&Education=sd&RelativeDementia=Ja&Apoe4=Vet+ej&
SystolicBT=asd&HypertoniaTreatment=Nej&FPColesterol=asd&PersonLength=asdas
&PersonWeight=dasd&PersonBMI=asd&AbdominalCircumference=adsasd
&KnownDiabetesMellitus=Ja&HadTIAStroke=Ja
&KnownHeartDisease=Ja
&IsCurrentlySmoking=Ja&IsExperiencingStress=Nej
&KnownDepression=Ja%2C+tidigare+behandlad&PhysicallyActive=Ja" 

用这种方法:

$(document).on("click", "#btnsubmit", function() {
    $.ajax({
        url: "/Home/RiskScore",
        type: "post",
        data: { "testData": $("form").serialize() },
        success: function(result) {
        }

现在我想反序列化它,以便我可以在下一页显示每个值的值和名称。我尝试了很多不同的代码变体,但没有成功。 希望你能帮忙!

由于

2 个答案:

答案 0 :(得分:1)

您还没有JSON数据,它是标准的URL编码表示法。如果要在服务器端访问它,可以循环发布数据。 ASP.NET会自动将此格式解析为Request.Form集合。

foreach(string key in Request.Form.AllKeys)
    Response.Write(Request.Form[key]);

您还需要将AJAX更改为:

data: $("form").serialize(),

之所以这样,是因为您不需要testData标识符,只需将原始POST数据作为data属性。

答案 1 :(得分:0)

您可以使用serializeArray方法将表单值作为名称 - 值对进行处理:

var nameValues = $("form").serializeArray();
for(var i = 0; i < nameValues.length; i++){
    console.log(nameValues[i].name);
    console.log(nameValues[i].value);
}