На основании этого теста он должен работать нормально. У обоих классов есть Конструкторы по умолчанию? Вы используете Авто-Свойства. Примечание. В этом базовом примере атрибуты не требуются. Кроме того, как отметил Дэвид Мортон, в зависимости от того, какой элемент вы возвращаете, вам может понадобиться атрибут KnownType, я не на 100%, но известный тип, возможно, должен идти в операционном контракте.
class Program
{
static void Main(string[] args)
{
var serializer = new DataContractSerializer(typeof(Employee));
var employee = new Employee() { Name="Joe", Salary=100000 };
using (var ms = new MemoryStream())
{
serializer.WriteObject(ms, employee);
ms.Position = 0;
var newEmployee = serializer.ReadObject(ms) as Employee;
}
Console.ReadKey();
}
}
[DataContract]
public class Employee : Person
{
[DataMember]
public decimal Salary { get; set; }
}
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
}
[ServiceContract]
interface IEmployeeService
{
[OperationContract]
Person GetPerson();
[OperationContract]
Employee GetEmployee();
[OperationContract]
[KnownType(typeof(Employee))]
Person GetEmployeeAsPerson();
}