В WCF могут сократиться данные, классы наследовались друг от друга?

Вы можете настроить вход для отображения: блок; Еще лучше будет div вокруг ввода.

24
задан SliverNinja - MSFT 10 May 2012 в 13:20
поделиться

3 ответа

Да, но необходимо украсить базовый класс [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; }
}
39
ответ дан David Morton 28 November 2019 в 23:21
поделиться

Хорошо, я выяснил вопрос. Ответ... Я - идиот. Это не имело никакого отношения к наследованию. В базовом классе у меня был участник контракта данных без пункта свойства 'набора' - только 'получение'. Doh!!! Включение пункта 'набора' заставило его работать как очарование.

Извините за беспорядок.

7
ответ дан Jordan Parmer 28 November 2019 в 23:21
поделиться

На основе этого теста это должно хорошо работать. Оба класса имеют Конструкторов по умолчанию? Вы используете Автосвойства. Отметьте В этом основном образце, Атрибуты не требуются. Кроме того, как 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();
}
1
ответ дан bendewey 28 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: