我不确定我丢失了什么地方。
我正在构建一个ASP.NET 2.0(在.Net 3.5框架上)Web应用程序,并且包括一个Web服务。请注意,这 不是 MVC项目。我希望公开一个将返回JSON字符串的方法;格式化以提供给jqGrid jQuery插件。
这是我在服务中实现的初步测试方法:感谢(Phil Haack的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包装,如何实现以上响应?
您可能没有做的三件事:
可能有一种用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>
背后的代码(您无需创建Web服务,可以将其放在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\"]}]}"}
更详细的解释在这里