Контракты данных WCF с базовым классом и производными классами - каковы последствия изменений в базовом классе? - PullRequest
6 голосов
/ 01 июня 2011

Насколько я понимаю, вы должны использовать свойство Order атрибута DataMember, чтобы вы могли добавлять вещи в контракт с данными без изменений, приводящих к поломке, но как вам следует подходить к этому, когда у вас есть базовый и подтипы?

Если у меня есть контракты данных, такие как:

[DataContract]
[KnownType(typeof(ChildDto))]
public class BaseDto
    {
    [DataMember (Name = "Property", Order = 0)]
    public string Property { get; set; }

    [DataMember (Name = "Property2", Order = 1)]
    public string Property2 { get; set; }
    }

[DataContract]
public class ChildDto:BaseDto
    {
    [DataMember (Name = "Property3", Order = 2)]
    public string Property3 { get; set; }

    [DataMember (Name = "Property4", Order = 3)]
    public string Property4 { get; set; }
    }

, и я хочу добавить новое свойство элемента данных в BaseDto, в каком порядке я должен присвоить это свойство, чтобы всене сломать?Или я не должен ничего добавлять к BaseDto?Могу ли я добавить вещи в ChildDto?

1 Ответ

5 голосов
/ 01 июня 2011

Это серьезное изменение.При добавлении новых членов в базовые классы правила сериализации контракта данных WCF всегда сериализуют всех членов из базового класса до любого из членов подкласса.

Подробнее об этих правилах можно прочитать в этом MSDNстраница с названием Заказ участника данных .

...