2010-06-30 73 views
1

我目前已經定義像這樣的ASMX方法:ASMX web服務和密鑰值參數

[WebMethod] 
public String Method1(Hashtable form) 

它接收JSON對象與屬性的變量數,例如:

{"form":{"name1":"10","name2":"20"}} 

這是工作正常,並給予預期的結果,當被叫時,但當我在瀏覽器中打開Web服務地址,我得到錯誤:

的類型System.Collections.Hashtable不支持,因爲它實現IDictionary的

我試過其他數據類型,如List<DictionaryEntry>這將解決這個問題,但後來爲空時調用該方法,我可以」 t找到在兩種情況下都能正常工作的東西...

這樣做的「正確」方式是什麼?

+0

這是怎麼用'Hashtable'工作,如果你得到一個異常? – 2010-06-30 13:13:26

+0

從客戶端腳本調用方法工作正常,唯一的問題是打開基礎.asmx。 – tjsar 2010-06-30 13:20:35

回答

1

IDictionary無法序列化爲XML(這是asmx Web服務的工作方式),因此您不能使用IDictionary的任何實現作爲返回值或參數。

因此,這樣做的「正確」方式是使用任何不執行IDictionary的事情。你可以做這樣的事情,而不是:

[WebMethod] 
public String Method1(params KeyValuePair<string, string>[] formdata) 

,然後調用它像這樣:

service.Method1(new KeyValuePair("name1", "10"), new KeyValuePair("name2", "20")); 
+0

我試過這個方法的定義,但是我得到了一個「無參數構造函數」,它定義了KeyValuePair []類型的錯誤。我還應該提到,我無法控制傳入的json數據。 – tjsar 2010-06-30 14:05:12

0

暫時的,我能做到這一點的解決辦法:

[WebMethod] 
public String Method1(Object form) 
{ 
    Dictionary<String, Object> data = (Dictionary<String, Object>)form; 

而且服務.asmx頁面加載沒有錯誤。

這仍然是沒有意義的,我雖然...

+0

我看不到如何工作......數據是否完全填充或爲空? – 2016-01-05 15:56:43