2012-03-05 4 views
0

im tring, чтобы вернуть объект BL с сервера wcf , но я получаю только все частные свойства.wcf return public members of bl object

как вернуть только публичные свойства BL.

тот ШМ класс в некоторых DLL я Refernce на ФОС сервер

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

тот метод ФОС в интерфейсе

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

метод, сделать список возврата:

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

ответ

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 (Data Transfer Object). Вам понадобится код для копирования соответствующих свойств, по крайней мере на стороне сервера.

+0

Атрибут [Serializable] находится в моем объекте bL. Я звоню и хочу вернуть его на свой wcf-сервер, но он возвращает только те частные переменные –

+0

Да, как вы сказали в вопросе. Вам нужен DataContract. –

+1

На самом деле WCF может использовать классы, отмеченные только '[Serializable]', и в этом случае он сериализует частные поля, которые не помечены '[NonSerialized]'. Однако предпочтительный способ - сделать то, что сказал ответчик, и использовать '[DataContract]'. – luksan