据我所知,你应该使用DataMember属性的Order属性,这样你就可以在不改变顺序的情况下向数据 Contract 中添加内容,从而导致事情中断,但是如果你有基类和子类型,你应该如何处理呢?
如果我有这样的数据交换:
[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 回答
这是一个突破性的变化 . 向基类添加新成员时,WCF数据协定序列化规则始终在任何子类成员之前序列化基类中的所有成员 .
您可以在 Headers 为Data Member Order的MSDN页面中阅读有关这些规则的更多信息 .