首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResponseFormat.Json返回xml

ResponseFormat.Json返回xml
EN

Stack Overflow用户
提问于 2011-04-10 10:22:20
回答 4查看 17.4K关注 0票数 5

我知道我不是第一个有这个问题的人,但我似乎找不到解决办法。

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

我搜索并尝试了很多东西

  1. 我尝试向我的web.config中添加不同的httphandler设置,就像在某些帖子中建议的那样,但是这些都没有效果。而且,我不认为这是必要的,因为我正在开发一个全新的win7 7/iis7.5/.net4box。我看过,自从.net 3.5之后,就不会有任何问题了。但是有!

  1. ,我尝试过了,不管有没有responseformat.json的装饰。我的webservice返回有效的json (我可以使用parsejson解析它,在提取字符串之后)
  2. ,我尝试显式地设置contenttype和数据类型。这会导致错误,抱怨响应无效json。没错!

正在发生的事情非常令人困惑,在IE中,至少在我的devbox中,响应返回为一个xml文档,在这里,我可以使用msg.text轻松获得json字符串,但是在生产过程中,我在FF中进行了测试,它作为文档返回,没有"text“属性。

这是我的javascript/jquery

代码语言:javascript
复制
$.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); 
    }
});

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

非常感谢您的建议和建议。

由衷地

编辑:这里是我刚刚测试过的一个示例EDIT服务:

代码语言:javascript
复制
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> <WebMethod()> Public Function JackJill() As String
    Return "[{""Name"":""Jack""},{""Name"":""Jill""}]"
End Function

然后当我把这个放进浏览器

http://localhost:81/webservice.asmx/JackJill

我得到了

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/">
[{"Name":"Jack"},{"Name":"Jill"}]
</string> 

为什么这里有这么多xml的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-17 12:04:51

我知道这个问题已经很老了,但万一将来有人在看这个答案.

我发现(根据这个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说他不想将他的服务限制在发布请求上,但是(根据这两个引用),如果您希望使用.ASMX并接收JSON,这就是您必须做的事情。

票数 8
EN

Stack Overflow用户

发布于 2012-05-04 14:45:43

我意识到这有点老了,但是我也在思考这个问题,即使输出类型被指定为Json,它仍然是用XML包装的。对于我来说,上面的解决方案的问题是,我需要一个GET来调用它。

不使用web服务的解决方案为我做了这项工作。我所做的就是创建另一个aspx页面并将其添加到我的项目中,在aspx页面中构建json对象并执行以下操作(全部在Page_Load方法中):

代码语言:javascript
复制
Response.ContentType = "application/json";
Response.Write(JsonObject.ToString());
Response.End();

然后从客户端调用“页面”,只需使用URL例如。"http://aspjsonpage.aspx?parameter=value

你得到了你需要的Json。

票数 3
EN

Stack Overflow用户

发布于 2012-06-28 08:22:00

嗨,我在使用webservice集返回json时遇到了同样的问题,.net仍然将其包装在XML包装中。我的老师告诉我正确的答案,那就是重新编写.NET框架4.0,所有的问题都解决了。何塞比斯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5611134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档