ASMX webservice - 返回 JSON 而不是 XML
Posted
技术标签:
【中文标题】ASMX webservice - 返回 JSON 而不是 XML【英文标题】:ASMX webservice - return JSON instead of XML 【发布时间】:2012-04-12 11:23:16 【问题描述】:我有一个包含一种方法的网络服务:
[WebMethod]
public string Movies()
using (var dataContext = new MovieCollectionDataContext())
var query = dataContext.Movies.Select(m =>newm.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 数据源的 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 中使用?我哪里错了?
【问题讨论】:
为什么在这里使用 JSONP?这没有意义。 好的,我删除了 jsonp,但问题还是一样,请解决它 我通过使用 WCF 和 JSONP 找到了另一种方法,它非常酷的组合并且完美地工作 你需要json和xml或者只有json 【参考方案1】:需要指定方法的ResponseFormat
:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetMovies()
注意:为了其他遇到类似问题的人,请注意您应该使用POST
请求,而不是GET
请求,这一点也很重要。见:JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks
编辑
根据您发布的 jQuery,您没有调用正确的方法。您的 C# 定义了一个名为 GetMovies
的方法,但您的 jQuery 正在尝试调用一个名为 `Movies' 的方法。
这个:
url: "/MovieService.asmx/Movies"
应该改成这样:
url: "/MovieService.asmx/GetMovies"
【讨论】:
@HaseebKhan,首先,不要叫我亲爱的:-)。其次,这是返回 JSON 格式数据的正确方法。请查看我的回答,并确认您已在测试环境中正确实施。 查看我更新的问题,以便您清楚我在做什么以及哪里出错了!对不起,我叫你亲爱的。 是的,是的,当然我删除了 get 并写了这一行 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 但我的问题仍然没有解决 但问题依旧 @HaseebKhan,根据您提供的信息,您可以从投票中看出,这是正确的答案。要么提供更多信息,要么花一秒钟或第三次查看您的代码。以上是关于ASMX webservice - 返回 JSON 而不是 XML的主要内容,如果未能解决你的问题,请参考以下文章
从 ajax 调用 webservice asmx 返回 404 错误
webservices 更改 ASMX Web 服务返回的命名空间前缀
[WebMethod]的使用,ajax调用[WebMethod]的使用,webservice(web服务) asmx的使用,ajax调用[WebMethod]进行json传输