2016-06-13 5 views
0

я это возвращение пришло отсюдаJQuery не десериализация объекта JSON

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 значение только?

+2

Try 'data.longPachage. Id' –

+0

Не пытайтесь вернуть 'json' так. Вместо этого возвратите 'JsonResult' объекта (и вы можете удалить бессмысленное' contentType: "application/json; charset = utf-8", 'option) –

+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) 
}); 
+0

JsonResult не вернет строку :)) –

+2

Чтобы вернуть json, его 'return Json (new {longPachage = new {ID = 0}}, JsonRequestBehavior.AllowGet);' –

+0

Я не могу вас понять –

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 "); 
     } 
    }) 
+0

alert "undefined" –

+0

вы можете предупредить переменную obj, чтобы увидеть, что находится в строке. – Developer

+0

alert [object Object] –

0

Да, Стивен прав.

Вы должны отправить результат json от контроллера.

для exa.

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

и в вашем успехе ajax просто получите этот объект или идентификатор данных.

$.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. 
     } 
    }) 
+0

не работает –

+0

и в чем проблема? просто поставьте функцию отладчика в успех и убедитесь, что ваш идентификатор данных имеет какое-либо значение или нет. – Bharat

0

Попробуйте использовать JsonResult в MVC, чтобы вернуть Json вместо построения строки. JsonResult - это просто класс абстракции ActionResult. Измените код в контроллере следующим

Метод 1:

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

ИЛИ

Способ 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); 
    } 

ИЛИ

Метод 3

Создать класс модели говорят 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) 
       }); 
+0

return this error \t Имя «Json» не существует в текущем контексте –

+0

Можете ли вы рассказать мне, какой метод вы использовали –

+0

Включили ли вы все достаточные пространства имен в контроллере –