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

IT技术 c# javascript jquery asp.net ajax
2021-03-07 17:52:34

我不知道如何用我的代码返回 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);
        }
    }); 
});

Default.aspx.cs 的 C#

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

提前致谢!

5个回答

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

[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开箱即用。

2021-04-16 17:52:34
如果您没有自定义转换器,序列化程序会将您的 C# 对象序列化/反序列化为具有相同属性名称的 json。但是,如果您希望您的 javascript 对象与您的 C# 对象不同,或者希望在反序列化时包含一些验证规则,那么您需要一个自定义转换器。以下是我问的一些问题:stackoverflow.com/questions/4998595/... stackoverflow.com/questions/10193024/...
2021-04-22 17:52:34
什么是MyCustomJson应该在这里?你能提供一个例子的链接吗?我想知道给定的课程需要多少手动编码。
2021-05-03 17:52:34
你也可以在你的顶部添加此static methodJavaScriptSerializer [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
2021-05-14 17:52:34

只需返回对象:它将被解析为 JSON。

public Object Get(string id)
{
    return new { id = 1234 };
}
它返回“[object Object]”。怎么装饰东西让它自动返回json?
2021-04-29 17:52:34
很短很甜蜜!好点子。
2021-05-14 17:52:34

这种结构对我有用 - 我在一个小型任务管理应用程序中使用了它。

控制器:

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。如果在您的 webmethod 中返回,您的 List 对象应该返回一个 json/javascript 数组。我的意思是,从方法返回数据时,不应将返回类型更改为字符串(因为这是您认为客户端所期望的)。如果从 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() %> 
            }