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

时间:2011-06-01 13:56:46

标签: 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; }
    }

我想向BaseDto添加一个新的数据成员属性,我应该给该属性命令,以便不会破坏某些内容?或者我不应该向BaseDto添加任何内容吗?我可以将内容添加到ChildDto吗?

1 个答案:

答案 0 :(得分:5)

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

您可以在标题为Data Member Order的此MSDN页面中详细了解这些规则。