我不确定我哪里错了。
我正在构建一个 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/