如何使用ASP.NET和jQuery返回JSON

我无法得到我的代码可以返回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); } }); }); 

C#的Default.aspx.cs

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

提前致谢!

你不远; 你需要做这样的事情:

 [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; } 

您可以进一步减less这些代码,但为了清晰起见,我将其保留。 事实上,你甚至可以写这个:

 return context.GetProducts().ToList(); 

这将返回一个JSONstring。 我更喜欢更明确,因为我使用自定义转换器。 还有Json.net,但框架的JavaScriptSerializer可以正常工作。

只要返回对象:它将parsing器为JSON。

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

这个结构适用于我 – 我在一个小的任务pipe理应用程序中使用它。

控制器:

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

Asp.net非常擅长将.net对象转换为json。 你的List对象如果在webmethod中返回,应该返回一个json / javascript数组。 我的意思是,当从方法返回数据时,不应该将返回types更改为string(因为这是您认为的客户端期望的)。 如果你从webmethod返回一个.net数组,一个javaScript数组将被返回给客户端。 对于更复杂的对象来说,它实际上并不是很好,但是对于简单的数组数据来说,它是很好的。

当然,那么你需要在客户端做你需要做的事情。

我会想这样的事情:

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

除非你的数据比简单的行/列数据复杂,否则不需要任何定制转换器的初始化

尝试使用这个,它对我来说是完美的

  // 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() %> }