Objective:
This article will explain
- 
Data Contract hierarchy 
 
- 
How base class and sub class are getting exposed in WCF?
 - 
What is Known Type attribute
 - 
Mixing of sterilization and DataContract 
 
Data Contract Hierarchy 

- 
If any class in hierarchy is not attributed as [DataContract] or [serilizable] then InvalidDataContractException will occur at service run time.
 
- 
WCF allows mixing 
[DataContract] and 
[Serilizable] attribute. But [Serilizable] should be at the root of the DataContract hierarchy. 
Examples:

 
Mixing of DataContract and Serilizable

Follow the below code,
- 
There are two classes in hierarchy
 
- 
 
Let us try to refer derive child class in base class, 
Contract and classes 

Error Service implantation 


How to solve this problem? 
KnownTypeAttribute 
- 
The solution is to explicitly tell WCF about the sub class to the base class.
 
- 
This is done using 
KnownType Attribute class.This class is defined as below in System.Runtime.Serilization namespace.
  
 - 
The 
KnownTypeAttribute allows designating the sub class.
Example
  
 - 
On the host side the KnownTypeAttribute affects all contracts and operations using the base class across all services and endpoints. This allows accepting subclass instead of base class.
 - 
WCF includes sub class in metadata such that client can also pass the sub class instead of base class.
 
ServiceKnownTypeAttribute 

ServiceKnownTypeAttribute class



ServiceKnownType could be applied on a particular service operation or to entire service contract.