2011-08-02 13 views
1

私はサーバー側でNHibernateを使ってデータを照会し、次にこれらのNHibernateオブジェクトを公開するWCFサービスを作成します。これらはSilverlightに正しくシリアル化され、アプリケーションで変更されますが、彼らは再びserlialized取得し、私は、サーバー側で、もはやそれを変更することはできませんので、一般的なリストは、Arrayに変換を取得...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]と表示されていますか? ArrayIListを実装しているので、そのは、完全に有効である、

[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型のインスタンスに設定されている場合:私はそれがあることを期待します。それらを実際のList<>インスタンスとして保持する場合は、IList<>の代わりにList<>というプロパティを定義します。

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