views:

21

answers:

1

Consider the following simple example:

[DataContract("{0}Base")]
public class Base<T> where T : Entity<T>
{
    // Common methods & properties.  No WCF exposed properties
}

[DataContract]
public class Employee : Base<Employee>
{
    // WCF exposed properties
}

The base class Base has no properties of interest to the WCF service consumers, but WCF forces me to also annotate the Base class with a [DataContract] attribute. This essentially shows up on the service client as Employee : EmployeeBase with EmployeeBase being an empty class with no properties.

I do not want to expose the Base<T> class to the service in this way, so what are my options?

  1. DTO for the Employee class - I'd rather not add this complexity
  2. "Flatten" the DataContract hierarchy so that the data contract for Employee does not expose that it inherits from Base<T>. Is this possible? How?
  3. Other solution?

Thanks.

+1  A: 

Each class in hiearchy has to be serializable / DataContract. If you don't want to expose hiearchy you have to use DTO or you can try to implement IDataContractSuroggate for your Employee class.

Best regards, Ladislav

Ladislav Mrnka
Looks like DTO or just accepting that the base object will be exposed. Actually, just stumbled upon this question, which I guess makes mine a duplicate: http://stackoverflow.com/questions/658361/wcf-serialization-with-object-inheritance
WayneC