C# 如何使用ASP.NET返回JSON&;jQuery
我不知道如何用代码返回JSON数据 JSC# 如何使用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) {
$(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?