RESTful Web服务返回XML而不是JSON

我有这个简单的Web服务,现在它只是查看部件号是否为A123456789然后它返回一个型号。 这将由将连接到数据库以检查partno的逻辑替换,然后返回实际的型号。 但此时我只需要它返回一些虚拟JSON数据。 然而,当我使用Fiddler并查看http:// localhost:PORT / Scan / Model / A123456789的web broswer中的调用时,它返回此

Model: CVS-1679 

但是当我在同一个URI的fiddler中进行GET时,我得到了

 "Model: CVS-1679" 

仅在textview选项卡下。

当我将ResponseFormat设置为JSON时,为什么它以XML(在Fiddler中的浏览器和文本中)而不是JSON返回?

我的代码:

 [WebGet(UriTemplate = "Model/{partno}", ResponseFormat = WebMessageFormat.Json)] public string Model(string partno) { if (partno == "A123456789") { string modelno = "CVS-1679"; return "Model: " + modelno; } else { string modelno = "CVS-1601"; return "Model: " + modelno; } } 

ASP.NET webservice默认返回XML / SOAP消息。 如果要返回Json字符串,则需要使用[ScriptService]属性修饰Webservice。 这告诉IIS,ASP.NET AJAX调用将使用此服务。 这些属性是System.Web.Extensions的一部分。

您可以通过使用ScriptMethod属性修饰web方法来定义Web方法响应格式。

 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

但是,即使在通过这些属性修改webservice和webmethod之后,响应仍然可以是XML格式。 当发出请求的客户端未将Request Header内容类型设置为“application / json”时,会发生此行为。

在使用JavaScriptSerializer将方法调用从webmethod serialize返回到Json字符串之前

使用Fiddler调试WebService

使用fiddler测试webservice非常容易。 下图是如何调用返回json字符串的Webservice的示例。 请注意,请求内容类型设置为application / json。 webserivce期望的参数在Request Body部分中进行了测量。 在此处输入图像描述

请注意,请求内容类型设置为application / json。

如果你看一下你得到的数据的格式,它将在Json中返回…

 key: value 

或者在你的情况下

 string Model = "CVS-1679" 

当您在fiddler中查看它时,您会看到从一个MS端点到另一个MS端点的原始序列化传输。 .NET框架中的序列化和反序列化元素负责通过线路传输它,因此当您将对象返回到调用端的.NET应用程序时,您将获得一个名为Model的变量,其中包含您期望的值。

如果您尝试发送整个类,您将看到许多嵌套的XML标记,但是当您在代码中获得该对象时,您将在对象层次结构中看到第一类公民。

它出现在浏览器中的原因是,浏览器不知道如何对其进行反序列化,因此只显示文本