WCF数据与基类和派生类收缩 - 基类更改的后果是什么?

Sam*_*der 6 wcf datacontract

据我所知,你应该使用DataMember属性的Order属性,这样你就可以在不改变顺序的情况下向数据契约添加内容,从而导致事情中断,但是如果你有基类和子类型,你应该如何处理呢?

如果我有这样的数据交换:

[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; }
    }
Run Code Online (Sandbox Code Playgroud)

我想添加一个新的数据成员属性BaseDto,我应该给该属性的顺序,以便事情不会中断?或者我不应该添加任何东西BaseDto?我可以添加东西ChildDto吗?

Dre*_*rsh 5

这是一个突破性的变化.向基类添加新成员时,WCF数据协定序列化规则始终任何子类成员之前序列化基类中的所有成员.

您可以在标题为" 数据成员顺序 "的MSDN页面中阅读有关这些规则的更多信息.