Asp.net mvc 如何使用JQuery从MVC反序列化JSON?

Asp.net mvc 如何使用JQuery从MVC反序列化JSON?,asp.net-mvc,json,jquery,Asp.net Mvc,Json,Jquery,好吧,现在是周五下午晚些时候,我已经为此奋斗了太久。。。我有一个返回JSON的MVC2类。JQuery在浏览器中尝试反序列化时抛出错误 这是控制器: <HttpPost()> Function ChangeAddress(ByVal addressId As Integer) As ActionResult ' Build and return JSON containing address. Dim v As New TestViewModel With {.Ad

好吧,现在是周五下午晚些时候,我已经为此奋斗了太久。。。我有一个返回JSON的MVC2类。JQuery在浏览器中尝试反序列化时抛出错误

这是控制器:

<HttpPost()>
Function ChangeAddress(ByVal addressId As Integer) As ActionResult

    ' Build and return JSON containing address.
    Dim v As New TestViewModel With {.Address1 = "My House"}
    Return Json(v)

End Function
下面是脚本:

// If list is not empty and item was found...
if (found == true) {

         var sum = 14;

    // Get fields of newly selected address.
    $.ajax({
        url: '../../Checkout/ChangeAddress',
        type: 'POST',
        traditional: true,
             data: { addressId: sum },
        success: function (result) {

            var json = result.get_data();
            var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);

            alert("Success!");

        }
    });
};
反序列化代码来自MVC音乐商店示例。在执行时,JQuery对get_数据抛出异常,表示“对象不支持此属性或方法”。好的,所以我试着注释掉这一行并尝试反序列化(结果)。然后异常显示“Sys.ArgumentException:无法反序列化。数据与有效的JSON不对应。参数名称:data”


我哪里出错了?

您不需要显式解析(“反序列化”)您的JSON!jQuery将尝试自动执行此操作,前提是它能够正确猜测返回的
数据类型。当然,您可以指定您期望的是JSON:

$.ajax({
    url: '../../Checkout/ChangeAddress',
    type: 'POST',
    dataType: 'JSON',               // <========== this line
    traditional: true,
    data: {addressId: sum},
    success: function (result) {

        var json = result.get_data();
        var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);

        alert("Success!");
    }
});
$.ajax({
url:“../Checkout/ChangeAddress”,
键入:“POST”,

dataType:'JSON',//好吧,我不得不笑了。da'ya知道,我可以直接读取Address1值,而无需显式解析。作为MVC的新手,我觉得所有这些automagic的东西都很好,但也有点令人不安。规则书(药剂书)在哪里这就解释了神奇之处?感谢您的快速响应。@Adventure:从开始,特别是
dataType
选项。
$.ajax({
    url: '../../Checkout/ChangeAddress',
    type: 'POST',
    dataType: 'JSON',               // <========== this line
    traditional: true,
    data: {addressId: sum},
    success: function (result) {

        var json = result.get_data();
        var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);

        alert("Success!");
    }
});