ASP.NET Web服务错误地返回XML而不是JSON

我正在尝试使用jQuery从javascript使用ASMX Web服务。当我要求XML时它工作正常,但我想利用.net的JSON序列化功能; (它也开始让我觉得这不起作用) Web服务的代码:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

[WebService()]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class SimpleService : WebService
{
    [WebMethod]
    public String GetString()
    {
        return "value";
    }
}
客户代码:
$.ajax({
  type: "POST",
  url: "SimpleService.asmx/GetString",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json"
});
而且回应......
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET

<?xml version="1.0" encoding="utf-8"?><string xmlns="http://tempuri.org/">value</string>
请求总是成功,但jQuery给了我一个解析器错误(不出意料,给出响应)。 我的智慧结束了。我尝试添加一个ServiceType设置为JSON的ServiceMethod属性,但似乎没有任何效果。 我也不想使用.NET ScriptManager javascript生成器,所以请不要建议使用它们。     
已邀请:
没有回答SO帮我解决了这个问题。相反,我找到2篇文章描述了这个问题。 jQuery不会将请求数据编码为JSON,而是编码为查询字符串。这会导致ASP.NET忽略
Accept
标头并使用XML进行响应。 查看本文标题为“JSON,对象和字符串:哦,我的!”。 在这里我引用:   $就({     类型:“POST”,     url:“WebService.asmx / WebMethodName”,     数据:{'fname':'dave','lname':'ward'},     contentType:“application / json; charset = utf-8”,     dataType:“json” });      因为该数据参数是有效的对象文字,所以以这种方式调用Web服务不会在客户端抛出任何JavaScript错误。不幸的是,它也不会有所期望的结果。
fname=dave&lname=ward
     这显然不是我们想要发生的事情。解决方案是确保您为数据参数传递jQuery字符串,如下所示:      $就({     类型:“POST”,     url:“WebService.asmx / WebMethodName”,     数据:“{'fname':'dave','lname':'ward'}”,     contentType:“application / json; charset = utf-8”,     dataType:“json”    });      这是语法上的一个小变化,但却有所不同。现在,jQuery将单独留下我们的JSON对象,并将整个字符串传递给ASP.NET,以便在服务器端进行解析。 在我的情况下,data参数是一个大对象,所以我使用类似的东西将它序列化为JSON manualy。
data: JSON.stringify({'fname':'dave', 'lname':'ward'}),
从jQuery查询时让ASP.NET ScriptService返回JSON是非常棘手的,代码中的许多参数可以使它抛出XML而不是JSON。你应该阅读各种SO Q / A以让自己满意。 相关文章构成同一作者,可能会给予更多指导。     
这个是用户错误。 我偶然发现了另一个stackoverflow问题:web-service在net 4-0中返回xml而不是json 一个类似的解决方案是我所需要的。 web.config文件有一个用于IIS6的ScriptHandlerFactory的httpHandler映射,我使用的是IIS7。将httpHandler映射添加到web.config的IIS7部分解决了这个问题。 我讨厌隐藏的活动部件....     
尝试将
[ScriptMethod]
属性添加到方法中:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public String GetString()
    

要回复问题请先登录注册