jQuery无法反序列化json对象

时间:2016-06-13 04:29:19

标签: c# jquery json ajax asp.net-mvc

我有来自这里的回报

 public string Get(int id)
        {
            return "{\"longPachage\":{\"Id\":0}}";
        }

并且我通过ajax使用此代码

接收此返回
 $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",           
            url: "http://localhost:3148/api/values/5",           
            success: function (data) {
                alert(data);                
                alert(" Success ");
            },
            error: function (data) {

                alert(" Error ");
            }
        })

我可以反序列化json对象并仅打印Id值吗?

4 个答案:

答案 0 :(得分:0)

像这样改变你的方法:

public ActionResult Get(int? id)
{
    return Content("{\"longPachage\":{\"Id\":0}}");
}

然后在你的jQuery中:

$.getJSON("http://localhost:3148/api/values", {id:5}, function(data) {
    var id = data.longPachage.Id;
    alert(id)
});

答案 1 :(得分:0)

您可以使用此代码。它可能对你有所帮助。 您不解析数据以获取字符串格式的JSON。因此,您现在可以使用此代码以字符串格式获取JSON数据。

var obj = JSON.parse(data);


$.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",           
        url: "http://localhost:3148/api/values/5",           
        success: function (data) {
        var obj = JSON.parse(data);
            alert(obj.Id);                
            alert(" Success ");
        },
        error: function (data) {

            alert(" Error ");
        }
    })

答案 2 :(得分:0)

是的,斯蒂芬是对的。

你必须从控制器发送一个json结果。

表示exa。

public JsonResult Get(int id)
{
    return Json(new 
    { 
          longPachage = new { ID = 0 } 
    }, JsonRequestBehavior.AllowGet);
}

并且在你的ajax成功中,只需检索该对象或dataID。

$.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",           
        url: "http://localhost:3148/api/values/5",           
        success: function (data) {
            var dataID = data.longPachage.Id;
            // Do with Your ID.
        },
        error: function (data) {
            //Do anything for error here.
        }
    })

答案 3 :(得分:0)

尝试在MVC中使用JsonResult来返回Json而不是构建字符串。 JsonResult只是一个ActionResult的抽象类。修改控制器中的代码,如下所示

方法1:

public JsonResult GetTest(int id)
{
    return this.Json(new { ID = 0 }, JsonRequestBehavior.AllowGet);
}

OR

方法2:

尝试将模型类创建为LongPachage

public class LongPachage()
{
   public int ID {get;set;}
}

并尝试按如下方式调用控制器方法

public JsonResult Get(int id)
    {
        LongPachage model = new LongPachage();
        model.ID = 0;
        return this.Json(model, JsonRequestBehavior.AllowGet);
    }

OR

方法3

创建Model类说TestModel并尝试添加LongPachage类作为此类的主要内容。

public class TestModel()
    {
       public LongPachage LongPachage {get;set;}
    }

并尝试按如下方式调用控制器方法

public JsonResult Get(int id)
    {
        TestModel model = new TestModel();
        model.LongPachage .ID = 0;
        return this.Json(model, JsonRequestBehavior.AllowGet);
    }

然后在视图中使用AJAX GET包装器尝试实现如下

 $.get('@Url.Action("Get","ControllerName")', { id: "5" })
                .done(function (data) {
                   // If you are using Method 1 or Method 2 alert will be as follows
                    alert(data.ID);
                   // If you are using method 3 
                    alert(data.LongPachage.ID)
                });