C# 返回XML而不是JSON的RESTful web服务

C# 返回XML而不是JSON的RESTful web服务,c#,asp.net,wcf,json,rest,C#,Asp.net,Wcf,Json,Rest,我有一个简单的web服务,现在它只是查看零件号是否为A123456789,然后返回一个型号。这将被连接到数据库中检查零件号然后返回实际型号的逻辑所取代。但此时我只需要它返回一些伪JSON数据。然而,当我使用Fiddler并查看web中的调用时,broswer返回这个 <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string> 仅在“文本视图”选项

我有一个简单的web服务,现在它只是查看零件号是否为A123456789,然后返回一个型号。这将被连接到数据库中检查零件号然后返回实际型号的逻辑所取代。但此时我只需要它返回一些伪JSON数据。然而,当我使用Fiddler并查看web中的调用时,broswer返回这个

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string>
仅在“文本视图”选项卡下

当我将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;
            }
        }

如果您查看所获取数据的格式,它将以Json格式返回

key: value
还是你的情况

string Model = "CVS-1679"
当您在fiddler中查看它时,您将看到原始序列化从一个MS端点传输到另一个端点。.NET framework中的序列化和反序列化元素负责跨线传输对象,因此当您在调用端将对象返回到.NET应用程序中时,您将获得一个名为Model的变量,该变量的值为您期望的值

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


它出现在浏览器中的原因是,浏览器不知道如何将其反序列化,因此默认情况下只显示文本ASP.NET webservice返回XML/SOAP消息。如果希望返回Json字符串,则需要使用[ScriptService]属性修饰Webservice。这将通知IIS ASP.NET AJAX调用将使用此服务。这些属性是System.Web.Extensions的一部分

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

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
然而,即使在通过这些属性修饰webservice和webmethod之后,响应仍然可以是XML格式。当发出请求的客户端没有将请求头内容类型设置为“application/json”时,就会发生这种行为

在从webmethod返回方法调用之前,请使用JavaScriptSerializer序列化为Json字符串

使用Fiddler调试WebService

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


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

向REST服务发出请求时,请确保将内容类型设置为application/json
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]