RESTful Web服务返回XML而不是JSON

时间:2011-12-01 15:10:00

标签: c# asp.net wcf json rest

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

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string>

但是当我在同一个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;
            }
        }

2 个答案:

答案 0 :(得分:5)

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序列化到Json字符串的方法调用之前

使用Fiddler调试WebService

使用fiddler测试webservice非常容易。下图是如何调用返回json字符串的Webservice的示例。 请注意,请求内容类型设置为application / json。 webserivce期望的参数在请求正文部分中进行了。enter image description here

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

答案 1 :(得分:4)

如果你看一下你得到的数据的格式,就会在Json中返回...

key: value

或在你的情况下

string Model = "CVS-1679"

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

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

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