2013-07-22 58 views
1

是否可以配置默認的ASP.NET WebService測試表單來支持JSON?我的意思是內置在.NET框架中的測試表單...ASP.NET WebService測試表格

目前我有一個用[ScriptService]裝飾的WebService,但是當我使用內置的測試表單頁測試它時,它返回XML ...我假定,這是因爲測試頁默認發送Content-Type XML。

感謝

EDIT(例)
我有類:

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

現在我有ASP.NET的WebService:

[ScriptService] 
public class PersonService : WebService 
{ 
    [WebMethod] 
    public Person GetDave() 
    { 
    Person dave = new Person(); 

    dave.FirstName = "Dave"; 
    dave.LastName = "Test"; 

    return dave; 
    } 
} 

當我打電話從此WebService使用jQuery AJAX的網頁,我收到JSON Person對象{"FirstName":"Dave","LastName":"Test"}(不是字符串)in JavaScript的,但是當我從調用WebService的ASP.NET測試窗體此WebService(當我在ASMX文件,點擊右鍵,使用 「在瀏覽器預覽」),

enter image description here

它返回:

<?xml version="1.0" encoding="utf-8" ?> 
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <FirstName>Dave</FirstName> 
    <LastName>Test</LastName> 
</Person> 

什麼希望的,就是當我從測試頁面調用該服務,看到相同的輸出:

{"FirstName":"Dave","LastName":"Test"} 

回答

0

添加以下引用第一

using System.Web.Script.Services; 
using System.Web.Script.Serialization; 

使用下面的代碼在你的方法,用於將任何數據成JSON數據格式在終端

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
return serializer.Serialize(dr); 

博士是DataTable.Hope數據行,這將有助於你的陣列。

+0

作爲一個以前的答案,這將迫使改變目前JS解析收到JSON字符串到對象(在生產代碼中)。我仍然想從服務返回強類型而不是JSON字符串。 –

+0

@AlexDn您能否向我們提供代碼片段,以顯示您所做的事情以及您真正的問題。 –

+0

我添加了一個例子,謝謝! –

1

您可以使用下面的代碼

[WebMethod(Description = "Some Description")] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string FunctionName() 
{   
    // Return JSON data 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    string retJSON = js.Serialize(Object); 
    return retJSON; 
} 

,你也需要添加引用。

更新

這裏是一個將解釋有關extending an existing ASP.NET Web Service to support JSON

希望幫助

+0

但是這會強制改變當前的JS來將接收到的JSON字符串解析爲對象(在生產代碼中)。我仍然想從服務返回強類型而不是JSON字符串。 –

+0

我有更新我的答案,請看看 – Microtechie

+0

我加了一個例子。謝謝 –

0

它看起來像我找到了解決辦法...它仍然不是完整的解決方案的鏈接,但是這是順便去:)

[Drive]:\[WindowsDir]\Microsoft.NET\Framework\[Version]\CONFIG文件夾中,存在名爲DefaultWsdlHelpGenerator.aspx的文件。該文件包含使用WSDL自動生成測試頁所需的全部代碼。現在我可以使用這段代碼編寫自己的測試頁面,並使用jQuery發出請求,而不是使用HTML表單...然後我可以放入配置文件,這應該工作。

<webServices> 
     <wsdlHelpGenerator href="WSTestPage.aspx"/> 
</webServices> 

也許某處有更簡單的/就緒方式做到這一點,但我仍然沒有找到它......