2011-01-11 39 views
3

我得到了一個WCF服務和一個方法(GetUserSoftware)來向客戶端發送List。WCF客戶端列表<>

的軟件,我已經定義是這樣的:

[DataContract] 
public class Software 
{ 
    public string SoftwareID { get; set; } 
    public string SoftwareName { get; set; } 
    public string DownloadPath { get; set; } 
    public int PackageID { get; set; } 

} 

方法正在經歷我的分貝讓所有軟件availeble到CLIEN,並生成一個列表發送回客戶端。

問題是我在客戶端列表變成了一個數組。並且該陣列中的每個項目都不包含我的任何軟件屬性。

我已通過服務器端調試我的方式。並看到它要發送的清單是正確的。與預期的軟件和屬性。

任何人都知道如何解決這個問題或知道我能做些什麼?

回答

4

您是否忘記了屬性上的[DataMemeber]屬性?

4

當您使用DataContract屬性作爲類型時,您必須使用DataMember屬性來指定要在服務和客戶端之間序列化和傳輸的每個屬性或字段。集合默認創建爲數組。如果您不喜歡,您可以在添加服務參考窗口 - >高級設置中更改此行爲,您可以在其中選擇應使用哪種集合類型。

+0

+1,它解決了我的小問題! – elbaid 2011-03-31 14:39:02

1

首先,每個要序列化的屬性應該有[數據成員]屬性:

[DataContract] 
public class Software 
{ 
    [DataMember] 
    public string SoftwareID { get; set; } 
    [DataMember] 
    public string SoftwareName { get; set; } 
    [DataMember] 
    public string DownloadPath { get; set; } 
    [DataMember] 
    public int PackageID { get; set; }  
} 

二,翻譯的陣列將通過客戶端,而不是服務器進行處理。

0

添加服務引用時,您可以維護列表而不是陣列上的數組:單擊「高級」按鈕並將集合類型更改爲所需的集合類型。

0

我患了同樣的問題,現在我解決了它!這是一個ServiceKnownType問題。如果你有一個已知的類型加載器,我們必須添加運行時類型,如:

Type aaa = Type.GetType("System.Collections.Generic.List`1[[ProjectName.BusinessObjects.Bank, ProjectName.BusinessObjects, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null]]"); 

knownTypes.Add(aaa); 

任何有同樣問題的人都可以試試這個。它在我的環境中工作!

相關問題