[英]ASMX webservice - return JSON instead of 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中查看響應時,它看起來像這樣:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string>
這是我使用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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.