c# - ASP.NET WebService 正在用 XML 标记包装我的 JSON 响应

标签 c# asp.net json web-services javascriptserializer

我不确定我哪里错了。

我正在构建一个 ASP.NET 2.0(在 .Net 3.5 框架上)Web 应用程序,并且包含一个 Web 服务。请注意,这不是 MVC 项目。我希望公开一个返回 JSON 字符串的方法;格式化以提供 jqGrid jQuery 插件。

这是我在我的服务中实现的初步测试方法:感谢(Phil Haack's Guide for MVC)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getData()
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new
    {
        total = 1, // we'll implement later 
        page = 1,
        records = 3, // implement later 
        rows = new[]{
          new {id = 1, cell = new[] {"1", "-7", "Is this a good question?", "yay"}},
          new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?", "yay"}},
          new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?", "yay"}}
        }
    };

    return ser.Serialize(jsonData); //products.ToString();
}

调用时返回(为清楚起见格式化):

<?xml version="1.0" encoding="utf-8" ?> 
<string  mlns="http://tempuri.org/">
{
  "total":1,
  "page":1,
  "records":3,
  "rows":
    [
      {"id":1,"cell":["1","-7","Is this a good question?","yay"]},
      {"id":2,"cell":["2","15","Is this a blatant ripoff?","yay"]},
      {"id":3,"cell":["3","23","Why is the sky blue?","yay"]}
    ]
}
</string> 

如果没有 xml 包装,我将如何实现上述响应?

最佳答案

您可能不会做的三件事:

  • 将方法标记为静态
  • 执行 POST
  • 为 jQuery 中的数据传递一个空的“{}”。

可能有一种方法可以使用 GET 调用方法,我只使用过 POST。我能够让您的示例与此一起使用:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
    // In your javascript block
    $(document).ready(function()
    {
        $.ajax({
            url: "/Default.aspx/Tester",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{}",
            success: done
        });
    });

    function done(data)
    {
        // Include http://www.json.org/json2.js if your browser doesn't support JSON natively
        var data = JSON.parse(data.d);
        alert(data.total);
    }
</script>

后面的代码(你不需要创建一个webservice,你可以把它放在你的default.aspx中):

[WebMethod]
public static string Tester()
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new
    {
        total = 1, // we'll implement later 
        page = 1,
        records = 3, // implement later 
        rows = new[]{
              new {id = 1, cell = new[] {"1", "-7", "Is this a good question?", "yay"}},
              new {id = 2, cell = new[] {"2", "15", "Is this a blatant ripoff?", "yay"}},
              new {id = 3, cell = new[] {"3", "23", "Why is the sky blue?", "yay"}}
            }
        };

    return ser.Serialize(jsonData); //products.ToString();
}

结果:

{"d":"{\"total\":1,\"page\":1,\"records\":3,\"rows\":[{\"id\":1,\"cell\":[\"1\",\"-7\",\"Is this a good question?\",\"yay\"]},{\"id\":2,\"cell\":[\"2\",\"15\",\"Is this a blatant ripoff?\",\"yay\"]},{\"id\":3,\"cell\":[\"3\",\"23\",\"Why is the sky blue?\",\"yay\"]}]}"}

更详细的解释是here

关于c# - ASP.NET WebService 正在用 XML 标记包装我的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058454/

相关文章:

java - 将 JSON 字符串解析为 List<Data Entry> 的文本文件

c# - 用 Servicestack.Text 重构类型对象的属性

ruby-on-rails - Rails 6,服务中的独立 Jbuilder : partials not loading

c# - .NET Standard 库输出不包括 nuget 依赖项

c# - Entity Framework 代码优先 : migration fails with update-database, 强制不必要的(?)添加迁移

c# - DropDownList 获得空白选择

c# - 如何检查空的 Gridview

c# - 基类包括字段 'report' ,但其类型 (Microsoft.Reporting.WebForms.ReportViewer) 是

c# - 如何立即触发 timer.Elapsed 事件

c# - 通用类型列表