WCF DataContract скрывается Базовый класс - PullRequest
0 голосов
/ 28 декабря 2011

Как я могу избежать разоблачения своего базового класса и его члена, когда я раскрываю своего DTO сотрудника (Когда я добавляю ссылку на сервис, не должно быть упоминания о классе организации / его членах).

   [Serializable]
    public abstract class Organization
    {
        public string Id{ get; set; }
        public string SSN{ get; set; }
    }

    [DataContract][Serializable]
    public class Employee :Organization
    {
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
    }

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Для этого вам нужно разделить контракт Employee на интерфейс и предоставить его через ваш сервис.

[Serializable]
public abstract class Organization
{
    public string Id { get; set; }
    public string SSN { get; set; }
}

[DataContract]
public interface IEmployee
{
    [DataMember]
    string FirstName { get; set; }
    [DataMember]
    string LastName { get; set; }
}

[Serializable]
public class Employee : Organization, IEmployee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Определите ваш сервис как возвращающий IEmployee, и просто верните конкретный Employee экземпляр.

0 голосов
/ 28 декабря 2011

Удалите атрибут [Serializable] из обоих классов, и все будет в порядке. Если вы используете атрибут [DataContract], то при создании прокси будут доступны только свойства / файлы с атрибутом [DataMember].

...