Подтвердить что ты не робот

Как вернуть JSON с помощью ASP.NET и jQuery

Я не могу получить, как я могу вернуть данные JSON с моим кодом.

JS

$(function () {
$.ajax({
        type: "POST",
        url: "Default.aspx/GetProducts",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            // How to return data here like a table???  
            $("#Second").text(msg.d);
            //alert(msg.d);
        }
    }); 
});

С# по умолчанию .aspx.cs

[WebMethod]
public static string GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return What do I have to return ????
}

Спасибо заранее!

4b9b3361

Ответ 1

Ты не за горами; вам нужно сделать что-то вроде этого:

[WebMethod]
public static string GetProducts()
{
  // instantiate a serializer
  JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

  //optional: you can create your own custom converter
  TheSerializer.RegisterConverters(new JavaScriptConverter[] {new MyCustomJson()});

  var products = context.GetProducts().ToList();   

  var TheJson = TheSerializer.Serialize(products);

  return TheJson;
}

Вы можете уменьшить этот код дальше, но я оставил его как это для ясности. Фактически, вы могли бы даже написать это:

return context.GetProducts().ToList();

и это вернет строку json. Я предпочитаю быть более явным, потому что я использую собственные преобразователи. Там также Json.net, но фреймворк JavaScriptSerializer работает просто отлично.

Ответ 2

Просто вернуть объект: он будет синтаксическим анализатором JSON.

public Object Get(string id)
{
    return new { id = 1234 };
}

Ответ 3

Эта структура работает для меня - я использовал ее в небольшом приложении для управления задачами.

Контроллер:

public JsonResult taskCount(string fDate)
{
  // do some stuff based on the date

  // totalTasks is a count of the things I need to do today
  // tasksDone is a count of the tasks I actually did
  // pcDone is the percentage of tasks done

  return Json(new {
    totalTasks = totalTasks,
    tasksDone = tasksDone,
    percentDone = pcDone
  });
}

В вызове AJAX я обращаюсь к данным следующим образом:

.done(function (data) {
  // data.totalTasks
  // data.tasksDone
  // data.percentDone
});

Ответ 4

Asp.net довольно хорош в автоматическом преобразовании объектов .net в json. Объект List, возвращаемый в ваш веб-метод, должен возвращать массив json/javascript. Я имею в виду, что вы не должны менять тип возвращаемого значения на строку (потому что это то, что вы ожидаете от клиента) при возврате данных из метода. Если вы вернете массив .net из веб-метода, массив javaScript будет возвращен клиенту. Это не работает слишком хорошо для более сложных объектов, но для простых данных массива это хорошо.

Конечно, тогда вам решать, что вам нужно делать на стороне клиента.

Я бы подумал примерно так:

[WebMethod]
public static List GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return products;
}

Не должно быть необходимости инициализировать какие-либо пользовательские преобразователи, если ваши данные не будут более сложными, чем простые данные строки/столбца.

Ответ 5

Попытайтесь использовать это, он отлично работает для меня

  // 

   varb = new List<object>();

 // Example 

   varb.Add(new[] { float.Parse(GridView1.Rows[1].Cells[2].Text )});

 // JSON  + Serializ

public string Json()
        {  
            return (new JavaScriptSerializer()).Serialize(varb);
        }


//  Jquery SIDE 

  var datasets = {
            "Products": {
                label: "Products",
                data: <%= getJson() %> 
            }