2012-03-05 2 views
0

wcfサーバーからBLオブジェクトを返すようにしていますが、私はすべてのプライベートプロプライエタリを取得します。wcf blオブジェクトの公開メンバーを返します

BLのパブリックプロパティのみを返す方法。

public List<Registration> GetRegistrations(string key, string client, int eventID, int regStatus) 
    { 
     if (Validation.ValidateClient(key, client) == false) 
      return null; 

     List<Registration> regs = Registration.GetRegByColumnandValue(eventID, (Registration.RegStatusFlags)regStatus); 
     return regs; 
    } 

は、私がインターフェイスでWCF方法厥WCFサーバーに

[OperationContract] 
    [WebGet(UriTemplate = "{Key}/{Client}/Registrations?eventID={eventID}&regStatus={regStatus}")] 
    List<Registration> GetRegistrations(string key, string client, int eventID, int regStatus); 

[Serializable()] 
public class Account 
{ 
    #region properties 

    private int _accountId; 
    public int AccountID 
    { 
     get 
     { 
      return _accountId; 
     } 
     set 
     { 
      _accountId = value; 
     } 
    } 


    private string _title; 
    public string Title 
    { 
     get 
     { 
      return _title; 
     } 
     set 
     { 
      _title= value; 
     } 
    } 


    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name= value; 
     } 
    }} 

をrefernceいくつかのdllに戻りリストを作成する方法をBLクラスのthats

答えて

0

WCFは[Serializable]属性を使用しません。

は、このようなあなたのBLオブジェクト(またはDTO)を書く:

[DataContract] 
public class Account 
{ 
    private int _accountId;  
    [DataMember] 
    public int AccountID 
    { 
     // get/set 
    } 

    private string _title; 
    [DataMember]  
    public string Title 
    { 
     // get/set 
    } 
} 

[Serializableを]タイプがシリアル化される方法を台無しされ、それはWCFに適していないのです。

別のレイヤーに埋め込まれていて削除できない場合は、DTO(データ転送オブジェクト)クラスを作成します。あなたは、少なくともサーバー側で、関連するプロパティをコピーするコードが必要になります。

+0

[Serializable]属性がmyLLオブジェクトにあります。 私はwcfサーバーで呼び出して返したいが、それらはプライベート変数だけを返す –

+0

はい、あなたが質問に言ったように。 DataContractが必要です。 –

+1

実際には、WCFは '[Serializable]'でマークされたクラスを使用できます。この場合、 '[NonSerialized]'でマークされていないプライベートフィールドを直列化します。しかし、好ましい方法は、回答者が言ったことを行い、 '[DataContract]'を使うことです。 – luksan

関連する問題