2011-08-02 5 views
1

서버 측에서 NHibernate로 데이터를 쿼리 한 다음이 NHibernate 객체를 게시하는 WCF 서비스를 만들고 Silverlight로 올바르게 serialize하고 응용 프로그램에서 수정하지만 서버로 다시 보낼 때 그들은 다시 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]입니까? 나는 것으로 기대 : 당신의 IList<BIMenu> ChildrenIList<BISecurityProfile> SecurityProfiles 속성이 Array 유형의 인스턴스로 설정되는 경우

[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; } 

또한, 그 완벽 유효 ArrayIList를 구현하기 때문이다. 실제 인스턴스를 List<> 개로 유지하려면 IList<> 대신 List<>으로 속성을 정의하십시오.

관련 문제