ASMX webservice – 返回JSON而不是XML

我有一个包含一种方法的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中查看响应时,它看起来像这样:

  [{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}] 

这是我使用Kendo Data Source的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"