【问题标题】:How to return JSON with ASP.NET & jQuery如何使用 ASP.NET 和 jQuery 返回 JSON
【发布时间】:2017-07-20 10:37:44
【问题描述】:

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

提前致谢!

【问题讨论】:

  • 为什么不用web api?
  • 试试JavaScriptSerializer 类。
  • 看看这个问题:stackoverflow.com/questions/8405458/… 基本上,您需要返回一个 json 字符串,为此,您需要使用 JavaScriptSerializer 将 C# 对象/列表序列化为 json 字符串。你不远了。
  • .NET 自动序列化许多类型...包括List<object>Dictionary<string, object> 等。如果您以在序列化时有用的方式构建类,您甚至不需要必须做任何花哨的事情,只需设置您的返回类型(在这种情况下)List<Product>

标签: c# javascript jquery asp.net ajax


【解决方案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 开箱即用就可以正常工作。

【讨论】:

  • 你也可以用JavaScriptSerializer[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]将这个添加到你的static method之上
  • MyCustomJson 应该在这里是什么?你能提供一个例子的链接吗?我想知道给定类需要多少手动编码。
  • 如果您没有自定义转换器,序列化程序会将您的 C# 对象序列化/反序列化为具有相同属性名称的 json。但是,如果您希望您的 javascript 对象与您的 C# 对象不同,或者想要在反序列化时包含一些验证规则,那么您需要一个自定义转换器。以下是我提出的一些问题:stackoverflow.com/questions/4998595/…stackoverflow.com/questions/10193024/…
【解决方案2】:

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

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

【讨论】:

  • 很短很甜!好主意。
  • 它返回“[object Object]”。怎么装饰东西让它自动返回json?
【解决方案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。如果在您的 web 方法中返回您的 List 对象,则应该返回一个 json/javascript 数组。我的意思是,当从方法返回数据时,您不应该将返回类型更改为字符串(因为这是您认为客户端所期望的)。如果您从 web 方法返回一个 .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() %> 
                  }
      

      【讨论】:

        猜你喜欢
        • 2013-12-17
        • 2010-09-27
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多