ResponseFormat.Json返回xml

Yis*_*ski 5 .net json web-services

我知道我不是第一个遇到这个问题,但我似乎无法找到一个有效的解决方案

当使用webservice set返回json时,.net仍然将它包装在XML包装器中.

我搜索并尝试了很多东西

  1. 我尝试在我的web.config中添加各种httphandler设置,如某些帖子所示,但这些没有效果.我也不认为它是必要的,因为我正在开发一个全新的win7/iis7.5/.net4盒子.我读到.net 3.5以后应该没有任何问题.但是还有!
  2. 我尝试使用和不使用responseformat.json装饰.我的webservice返回有效的json(我可以在提取字符串后用parsejson解析它)
  3. 我尝试显式设置contenttype和datatype.这导致错误抱怨响应无效json.哪个是对的!

发生的事情非常令人困惑,在IE中,至少在我的devbox上,响应作为xml文档返回,我可以使用msg.text并轻松获取json字符串,但在生产中我在FF中测试并返回为文档,没有"文本"属性.

继承人我的javascript/jquery

$.ajax({
error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status+'-'+xhr.statusText);
    alert(thrownError);
    },
    url: '<%=ResolveUrl("~/WebService.asmx")%>' + "/JackJill",
    contentType: "application/json",
    success: function (msg) {
        alert(msg.d); 
    }
});
Run Code Online (Sandbox Code Playgroud)

所以:我怎么能简单地要求.net返回一个有效的常规json字符串,而不是包装它.我相信这将解决所有问题.它还将使我的服务更容易为整个世界所用,因此他们不必进行任何特殊的解析.

非常感谢您的任何建议或指示

诚挚

编辑: 继承了我刚测试的示例Web服务:

<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> <WebMethod()> Public Function JackJill() As String
    Return "[{""Name"":""Jack""},{""Name"":""Jill""}]"
End Function
Run Code Online (Sandbox Code Playgroud)

然后当我把它放在浏览器中

HTTP://本地主机:81/webservice.asmx/JackJill

我明白了

<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/">
[{"Name":"Jack"},{"Name":"Jill"}]
</string> 
Run Code Online (Sandbox Code Playgroud)

为什么所有这些xml都在这里?

she*_*ard 7

我意识到这个问题已经过时了,以防其他人在将来看到这个答案....

我找到了(根据http://encosia.com/asmx-and-json-common-mistakes-and-misconceptions/http://weblogs.asp.net/scottgu/archive/2007/04/04 /json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx)如果您希望从.ASMX中使用JSON,则需要:

  • 将内容类型设置为'application/json'和
  • 将方法设置为'POST'

以上Yisman说他不想将他的服务限制为POST请求,但是(根据这两个引用)似乎如果你想使用.ASMX并接收JSON那就是你将要做的事情.