2012-09-17 120 views
0

我想創建和使用一個Web服務...我使用.NET Framework 4.0(C#)。 該服務公開這樣的方法:不能轉換類型'對象[] []'爲'System.Collections.Generic.List <object>'

public List<object[]> GetData(string strRegion, List<string> lstBrand, List<string> lstColor) 

然後在客戶端應用程序,我宣佈對象的列表:

List<object[]> lst = new List<object[]>(); 

...並試圖填補它像這樣:

MyService.MyClient os = new MyClient(); 
    lst = os.GetData(myRegionString, myBrandList, myColorList); 

...但我得到「無法將類型'object [] []'轉換爲'System.Collections.Generic.List'」。我究竟做錯了什麼?

謝謝!

+0

它看起來像服務方法實際上不會返回'List ',但'object [] []'。 – svick

回答

3

在解決方案資源管理器中,右鍵單擊您的服務並執行配置。您可能已將數據收集默認類型設置爲數組。您可以將其設置爲列表類型。另外,我會重新考慮通過Web服務發送object。您通常需要一個定義良好的數據類型。我不認爲你甚至可以通過網絡服務發送類型object

+0

你是什麼意思,「...你通常想要一個明確的數據類型......」? – user1481183

+0

Web服務將爲消費者提供描述每個對象/參數的數據類型的WSDL文件。 「對象」類型可以是任何東西,因此不能很好地定義。你可能想要用'int','string','double'等。你可以擁有自己的數據類型,並且包含這些基本的數據類型。然後WSDL會向消費者描述您的自定義數據類型包含的內容。 – Justin

+0

如果您想發送一個列表,其中每個列表項都包含字符串,數字和日期等對象,該怎麼辦? – user1481183

2

嘗試

MyService.MyClient os = new MyClient(); 
    lst = os.GetData(myRegionString, myBrandList, myColorList).ToList(); 

名單將得到序列化爲數組,因爲它們都是從Web服務傳遞給客戶端,所以你需要再次轉換回列表。

0

MyClient.GetData()方法返回鋸齒狀數組。爲了這個數組轉換成一個列表,你應該能夠從System.Linq的命名空間使用ToList()方法:

lst = os.GetData(myRegionString, myBrandList, myColorList).ToList(); 
0

顯然返回交錯數組,對象[]的不是一個通用的清單。一個解決方案已經建議 - 只需更改返回值的類型。但是我認爲更好的是在各處使用接口 - 數組和泛型列表都實現了IList,所以如果你讓你的方法返回一個IList類型的值,並且你的第一個變量也是IList,那麼你不應該即使你的方法返回一個參差不齊的數組也有問題。

相關問題