2012-01-09 50 views
2

這裏的情景:ASP.Net Web服務:什麼對象類型用作參數集合?

有一個Web服務(的.asmx),其中包含它接受一個字符串,指定從哪裏獲得一些信息的單一方法和參數列表,這可以根據輸入的內容是不同的爲第一個值。

例如,呼叫可能看起來像:

WebserviceMethod("PeopleSearch", { FirstName: "John", LastName: "Doe" }) 

我會用什麼樣的集合爲第二個參數?這真的只是一個簡單的字典/哈希表,但我不相信字典是序列化

+1

如果該服務尚不存在,那麼爲什麼不使用WCF? – 2012-01-09 18:55:17

+0

是集合中的參數值總是爲字符串? – 2012-01-09 21:42:30

回答

3

你是正確的,字典是不是serialisable,所以創建自己:

Class secondParam{ 
    Public string key { get: set; } 
    Public string value { get; set; } 
} 

並接受列表作爲你的第二個參數。 (或者你願意的陣列)

+0

這是我結束實施(加上標記爲[序列化])一些更多的研究 – John 2012-01-09 21:48:51

+0

太棒了。作爲一個方面說明,看起來您正在編寫一個「通用」Web服務方法,其中第一個參數是您希望調用的實際函數,第二個參數是參數。作爲一般規則,您可能希望避免這樣做,而是爲您希望進行的每個不同呼叫創建一個新方法。這將強制類型安全,確保你通過正確的參數,並且使評論和更易於維護的代碼更容易:) – Rocklan 2012-01-10 00:15:28

0

那麼,你可以很容易地實現它作爲List<KeyValuePair<TKey, TValue>>。還有一個numberofimplementations你可以搶下互聯網。

+0

我不相信KVP是可序列化的 – John 2012-01-09 21:49:05

+0

Ack - 你是對的。回顧我的項目,我用[Serializable]屬性手動重新實現了它。傻我沒有檢查命名空間。 – jklemmack 2012-01-09 23:53:29

+0

實際上,看着MSDN(並用WCF接口進行驗證),Dictionary IS是可序列化的! http://msdn.microsoft.com/en-us/library/xfhwa508.aspx – jklemmack 2012-01-10 16:59:55