我有这个简单的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;
}
}
答案 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期望的参数在请求正文部分中进行了。
请注意,请求内容类型设置为application / json。
答案 1 :(得分:4)
如果你看一下你得到的数据的格式,就会在Json中返回...
key: value
或在你的情况下
string Model = "CVS-1679"
当您在fiddler中查看它时,您会看到从一个MS端点到另一个MS端点的原始序列化传输。序列化&amp; .NET框架中的反序列化元素负责通过线路传输它,因此当您在调用端将对象返回到.NET应用程序时,您将获得一个名为Model的变量,其值为您期望的值。 p>
如果您尝试发送整个类,您将看到许多嵌套的XML标记,但是当您在代码中获得该对象时,您将在对象层次结构中看到第一类公民。
它出现在浏览器中的原因是,浏览器不知道如何对其进行反序列化,因此只显示文本