Вы можете настроить вход для отображения: блок; Еще лучше будет div вокруг ввода.
Да, но необходимо украсить базовый класс [KnownTypeAttribute] построение его с типом производного класса. Например:
[DataContract]
[KnownType(typeof(B))]
public class A
{
[DataMember]
public string Value { get; set; }
}
[DataContract]
public class B : A
{
[DataMember]
public string OtherValue { get; set; }
}
Хорошо, я выяснил вопрос. Ответ... Я - идиот. Это не имело никакого отношения к наследованию. В базовом классе у меня был участник контракта данных без пункта свойства 'набора' - только 'получение'. Doh!!! Включение пункта 'набора' заставило его работать как очарование.
Извините за беспорядок.
На основе этого теста это должно хорошо работать. Оба класса имеют Конструкторов по умолчанию? Вы используете Автосвойства. Отметьте В этом основном образце, Атрибуты не требуются. Кроме того, как David Morton упомянул Вас, в зависимости от которого элемента Вы возвращаетесь, Вам, возможно, понадобится атрибут 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();
}