C# 如何使用ASP.NET返回JSON&;jQuery

C# 如何使用ASP.NET返回JSON&;jQuery,c#,javascript,jquery,asp.net,ajax,C#,Javascript,Jquery,Asp.net,Ajax,我不知道如何用代码返回JSON数据 JS $(function () { $.ajax({ type: "POST", url: "Default.aspx/GetProducts", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) {

我不知道如何用代码返回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#of Default.aspx.cs

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

提前谢谢

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

当然,这取决于你在客户端做你需要做的事情

我会这样想:

[WebMethod]
public static List GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return products;
}
.done(function (data) {
  // data.totalTasks
  // data.tasksDone
  // data.percentDone
});

除非您的数据比简单的行/列数据更复杂,否则不需要初始化任何自定义转换器;您需要这样做:

[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
开箱即用。试着使用它,它对我来说非常适合

  // 

   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() %> 
            }
//
varb=新列表();
//范例
Add(new[]{float.Parse(GridView1.Rows[1].Cells[2].Text)});
//JSON+Serializ
公共字符串Json()
{  
return(newJavaScriptSerializer()).Serialize(varb);
}
//Jquery端
变量数据集={
“产品”:{
标签:“产品”,
数据:
}

这个结构适合我-我在一个小型任务管理应用程序中使用了它

控制员:

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调用中,我访问的数据如下:

[WebMethod]
public static List GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return products;
}
.done(function (data) {
  // data.totalTasks
  // data.tasksDone
  // data.percentDone
});

只需返回对象:它将是JSON的解析器

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

为什么不使用web api?试试
JavaScriptSerializer
类。看看这个问题:基本上,你需要返回一个json字符串,为此,你需要使用JavaScriptSerializer将C#对象/列表序列化为json字符串。你不远了。NET自动序列化了许多类型…包括
List
Dictionary
,等等。如果您以一种在序列化时非常有用的方式构造类,您甚至不必做任何花哨的事情,只需将返回类型(在本例中)设置为
列表
,您还可以使用
JavaScriptSerializer
将其添加到
静态方法
之上(UseHttpGet=true,ResponseFormat=ResponseFormat.Json)]
这里应该有什么
MyCustomJson
吗?你能提供一个例子的链接吗?我想知道对于一个给定的类需要多少手动编码。如果你没有自定义转换器,序列化程序会将你的C#对象序列化/反序列化为具有相同属性名称的json。但是如果你想要javascript对象ect与您的C#对象不同,或者希望在反序列化时包含一些验证规则,那么您需要一个自定义转换器。以下是我对此提出的一些问题:这个问题也很简短!好主意。它返回“[对象]”。您如何修饰它,使其自动返回json?