2011-08-02 74 views
1

我在服務器端用NHibernate查詢數據,然後創建一個WCF服務,它是發佈這些NHibernate對象的一個​​,它們被正確地序列化爲Silverlight,我在應用程序中修改它們,但是當我將它們發送回服務器時他們再次獲得serlialized和泛型列表被轉換到陣列,所以我不能在服務器端修改他們了......如何在WCF中將客戶端的通用列表傳遞給服務器?

這是我的類定義

public class BIMenu 
{ 
    public virtual Guid ID { get; set; } 
    public virtual String DisplayName { get; set; } 
    public virtual String ProgramToCall { get; set; } 
    public virtual IList<BIMenu> Children { get; set; } 
    public virtual IList<BISecurityProfile> SecurityProfiles { get; set; } 
    public virtual Boolean IsApplication 
    { 
     get 
     { 
      if (Children.Count < 1 && ProgramToCall != null) 
       return true; 
      return false; 
     } 
    } 
    public virtual Boolean IsFolder 
    { 
     get 
     { 
      return !IsApplication; 
     } 
    } 

    public BIMenu() 
    { 
     Children = new List<BIMenu>(); 
     SecurityProfiles = new List<BISecurityProfile>(); 
    } 
} 

,這是我的合同

[ServiceContract] 
public interface IBISecurityService 
{ 
    [OperationContract] 
    BIMenu GetMenu(String Name); 

    [OperationContract] 
    void SaveMenu(BIOnline.Model.BIMenu Menu); 

    [OperationContract] 
    void DeleteMenu(BIOnline.Model.BIMenu Menu); 
} 

回答

1

是您的BIMenu類是的標記[DataContract]?我希望它是:

[DataContract] 
public class BIMenu 
{ 
    [DataMember] 
    public virtual Guid ID { get; set; } 
    [DataMember] 
    public virtual String DisplayName { get; set; } 
    [DataMember] 
    public virtual String ProgramToCall { get; set; } 
    [DataMember] 
    public virtual IList<BIMenu> Children { get; set; } 
    [DataMember] 
    public virtual IList<BISecurityProfile> SecurityProfiles { get; set; } 

另外,如果您的IList<BIMenu> ChildrenIList<BISecurityProfile> SecurityProfiles屬性被設置爲Array類型的實例,那麼就是完全合法的,因爲Array實現IList。如果要將它們保留爲實際的List<>實例,則只需將屬性定義爲List<>而不是IList<>,如下所示:

// Defined as actual Lists, not IList interfaces. 
[DataMember] 
public virtual List<BIMenu> Children { get; set; } 
[DataMember] 
public virtual List<BISecurityProfile> SecurityProfiles { get; set; } 
相關問題