C# 无法分析JQuery ajax调用返回的JSON

C# 无法分析JQuery ajax调用返回的JSON,c#,jquery,asp.net,ajax,json,C#,Jquery,Asp.net,Ajax,Json,我使用下面给出的jQueryAjax调用一个方法 $.post('../User/GetCountry', { zone: 1 }, function (data) { alert(data); alert(data["Countries"]); }, "json").fail(function (jqXHR, textStatus, errorThrown)

我使用下面给出的jQueryAjax调用一个方法

$.post('../User/GetCountry',
        {
            zone: 1
        },
        function (data) {
            alert(data);
            alert(data["Countries"]);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
            //alert(textStatus);
        });
C#代码

现在,当我在服务器端调试代码时,我看到下面的结果,我认为这是完美的json

[{"Id":4,"Name":"France"},{"Id":3,"Name":"Germany"}]
但是在javascript中,我得到的json是

[[object Object],[object Object]]
有人能告诉我我在这里错过了什么吗

使用 var jsonData=JSON.stringify(数据); var jsonParse=JSON.parse(jsonData)

试试这个:

alert(data[0].Name)
尝试使用JSON.parse():


您的代码有一些问题。首先,尽管您正在向web服务方法传递一个参数
zone
,但该方法本身并不接收此参数。其次,如果要返回JSON,请不要使用返回类型字符串。使用
JSONResult
。这也将允许您删除static关键字。我建议更改您的方法,如下所示:

public JSONResult GetCountry(int? zone)
{
    // ...
}
最后,您应该做两个更改。第一种方法是使用ASP.NETMVC内置的
Json()
方法来处理对象的序列化。第二,您应该始终投影数据层结果,即使它们恰好已经在您想要使用的结构中。这样,如果您以中断服务的方式更改数据层对象,您将得到一个编译错误,而不是运行时异常

return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })
我还建议避免使用
$.get
$.post
,因为它们会抽象出访问web服务时可能有用的设置。如果您想简化它,我建议在您自己的函数中包装
$.ajax
调用。您还需要考虑将web服务响应标准化。您的web服务是一种协议,因此它受益于定义良好的头。有关更深入的解释,请参见此处:


对我有好处。您需要确保发送的内容类型为“application/json”,最好使用
Controller

中的
json()
helper方法,在进一步搜索后解决了这个问题

$.post('../User/GetCountry',
    {
        zone: 1
    },
    function (data) {
        var jsonData = JSON.stringify(data); 
        var jsonParse = JSON.parse(jsonData);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
          alert(textStatus);
    });

它只是告诉您这是一个对象数组:),它是真正的使用
console.log(data)
。alert()将尝试为您字符串化,这意味着objecst将只是
对象对象
。您将获得一个对象数组。尝试使用反序列化数组。这样就容易多了@icemanind它已经反序列化了,因此他看到的是[object object]。@RajKumar有趣,这是我刚刚发布的:)我使用的是asp.net而不是MVC
return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })
$.ajax({
    type: 'POST',
    url: '../User/GetCountry',
    data: {
        zone: 1
    },
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});
$.post('../User/GetCountry',
    {
        zone: 1
    },
    function (data) {
        var jsonData = JSON.stringify(data); 
        var jsonParse = JSON.parse(jsonData);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
          alert(textStatus);
    });