C# Web 服务不会输出 JSON,只会输出 XML

Posted

技术标签:

【中文标题】C# Web 服务不会输出 JSON,只会输出 XML【英文标题】:C# Web Service won't output JSON, only XML 【发布时间】:2010-10-14 09:49:02 【问题描述】:

我正在尝试将 jQuery 和 JSON 与我编写的 C# Web 服务一起使用。无论如何,下面的代码只会以 XML 格式输出。

网络服务代码

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld() 
    return "Hello World!";

我也有这些属性分配给类

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]

jQuery 代码

$.ajax(
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "ScheduleComputerDS.asmx/HelloWorld",
    data: "",
    dataType: "jsonp",
    success: function(data) 
        alert(data);
    
);

ASMX 页面始终以内容类型“text/xml”的形式返回。我有什么遗漏吗?

编辑:回应几个答案:

如果我的数据类型只是“json”,内容仍然是 XML,jQuery 也不会调用我的回调函数。如果我添加“&callback=?”到 url,IIS 会抛出 HTTP 500 错误。

我的课程确实继承自“System.Web.Services.WebService”。

通过对你们的答案进行一些研究,看来我确实需要弄乱 WCF。不幸的是,返回的 JSON 更多是为 MS Ajax 设计的,对我来说是很多无用的膨胀。我可能会研究像 Jayrock 这样的开源库或类似的东西。

感谢您的帮助!

【问题讨论】:

我是 *** 的新手,所以我不知道这条评论会如何参考其他评论,但是......如果我的数据类型只是“json”,那么内容仍然是 XML 和 jQuery不会调用我的回调函数。如果我添加“&callback=?”到 url,IIS 抛出 HTTP 500 错误。 @TheDude - 您可以编辑原始问题以添加此信息。问题部分左下角的标签下有一个编辑链接 如果可以使用 WCF REST Starter Kit,刚刚发布了 Preview 2 【参考方案1】:

我认为有一个错字:

dataType: "jsonp",

应该是:

dataType: "json",

【讨论】:

awesome :) 我最近犯了这个错误,但我在那里有“脚本”。是从示例中复制和粘贴的 我知道这是一个旧帖子,我只是想确保每个新人都不会走错路,它的jsonp 没有错字,请检查json-p.org @LuisSánchez: jsonp 不推荐。留下它json。直接从您提供的链接中:“依赖 JSON-P 进行跨域 Ajax 的作者实际上正在向潜在的混乱敞开大门,就像通过在第一名”【参考方案2】:

据我所知,ScriptService 属性只允许服务自动创建 javascript 代理(通过将 /js 附加到端点地址 - 在您的情况下为 ScheduleComputerDS.asmx/js)。它不允许您以您尝试的方式调用服务上的操作。

您可以改为使用 RESTful WCF 服务(需要 .NET 3.5),您可以通过 HTTP GET 发送适当形状的 URI 来访问该服务。

【讨论】:

【参考方案3】:

Rich Strahl 有一篇非常基础的帖子可以帮助您解决这个问题。

http://www.west-wind.com/weblog/posts/164419.aspx

【讨论】:

这个链接很有帮助。谢谢【参考方案4】:

您是否尝试过使用数据类型json

另外,请查看 Encosia 关于此事的 Using jQuery to Consume ASP.NET JSON Web Services 文章。还有一些关于常见陷阱的有用信息。

【讨论】:

以上是关于C# Web 服务不会输出 JSON,只会输出 XML的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# --> asp.net web api 在 json 中获取分层输出

从 ASP.Net Web 服务 json 输出中删除“d”对象

使用 WCF 创建需要身份验证并使用 JSON 作为输入/输出格式的 RESTful Web 服务

C#在'x'行后暂停流读取器输出然后继续

发出 JSON 的 WCF Web 服务(Noob 建议)

R Shiny 不会在闪亮的应用程序中显示输出,而只会在控制台中显示输出(以及如何正确计算子组的平均值)?