ASMX Web服务-返回JSON而不是XML
本文关键字:XML JSON 返回 Web 服务 ASMX | 更新日期: 2023-09-27 18:29:14
我有一个web服务,它包含一个方法:
[WebMethod]
public string Movies()
{
using (var dataContext = new MovieCollectionDataContext())
{
var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20);
var serializer = new JavaScriptSerializer();
return serializer.Serialize(query);
}
}
该方法正确地序列化了对象,但当我在FireBug中查看响应时,它看起来是这样的:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"'/Date(1224007200000)'/"},{"Title":"Termonator Salvation","ReleaseDate":"'/Date(1224007200000)'/"}]</string>
这里是jQuery方法,我在其中使用剑道数据源
$(function () {
alert("Welcome To Kendo");
var dataSource = new kendo.data.DataSource(
{
transport: {
read: {
type: "POST",
dataType: "json",
url: "/MovieService.asmx/Movies"
// contentType: "application/json; charset=utf-8"
}
},
change: function (e) {
alert(e);
},
error: function (e) {
alert(e[2]);
},
pageSize: 10,
schema: {
data: "d"
}
});
$("#MovieGridView").kendoGrid({
dataSource: dataSource,
height: 250,
scrollable: true,
sortable: true,
pageable: true,
columns: [
{ field: "Title", title: "Movie Name" },
{ field: "ReleaseDate", title: "Movie Release" }
],
editable: "popup",
toolbar: ["create"]
});
});
上面的代码显示了我在jQuery中所做的事情,当错误事件调用时,我得到了这个错误
SyntaxError: JSON.parse: unexpected character
如何将上述数据转换为JSON,以便在jQuery中使用它?我哪里错了?
您需要指定方法的ResponseFormat
:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetMovies() {
}
注意:为了其他遇到类似问题的人,同样重要的是要注意,您应该使用POST
请求,而不是GET
请求。请参阅:JSON劫持和ASP.NET AJAX 1.0如何避免这些攻击
编辑
根据您发布的jQuery,您没有调用正确的方法。您的C#定义了一个名为GetMovies
的方法,而您的jQuery正试图调用一个名"Movies"的方法。
此:
url: "/MovieService.asmx/Movies"
应更改为:
url: "/MovieService.asmx/GetMovies"