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

WCF与基类和派生类的数据契约-基类更改的后果是什么?,wcf,datacontract,Wcf,Datacontract,据我所知,您应该使用DataMember属性的Order属性,这样您就可以在不改变顺序的情况下将内容添加到数据协定中,从而导致内容中断,但是当您有基本类型和子类型时,您应该如何处理这个问题呢 如果我有这样的数据合同: [DataContract] [KnownType(typeof(ChildDto))] public class BaseDto { [DataMember (Name = "Property", Order = 0)] public string Pro

据我所知,您应该使用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; }
    }

我想将一个新的数据成员属性添加到
based中,要想
,我应该按什么顺序赋予该属性,这样事情就不会中断?或者我不应该向基于
添加任何内容吗?我可以把东西添加到
childto

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


您可以在MSDN标题为的页面上阅读更多关于这些规则的信息。

好奇地想知道,订单真的需要吗?您或您的服务客户使用该订单的目的是什么?@wpfguy该订单是您将来更新合同时需要的。默认情况下,订单将按字母顺序排列,但您可以指定订单,以确保旧客户仍然可以使用新版本的合同,如果使用旧联系人,旧客户将忽略新数据。如果由于这些更改,新数据出现在以前由其他数据使用的位置,则旧客户端将无法使用它或将不正确地使用它。那么,就是这样吗?如果使用数据协定,则永远不能将成员添加到基类中?