为什么要在“DataMember”上指定“Order”?
问题描述:
我最近的一些序列化类已经工作,他们通常是这个样子:为什么要在“DataMember”上指定“Order”?
[DataContract]
public class Foo
{
[DataMember(Order = 0)]
public string Bar1
{
get;
set;
}
[DataMember(Order = 1)]
public string Bar2
{
get;
set;
}
}
我在想,一个能有什么可能的应用用于指定数据成员的订单?指导here指定它可能“有时可能需要更改此顺序。”但不要举例说明什么时候或为什么。你有什么时候或为什么这可能是必要的例子吗?
在我的应用程序中,我简单地序列化这些类型的这些对象并将它们保存到文件中。在这里指定“订单”是否有任何价值,或者是否只是添加其他内容来维护?如果我只是从每个数据成员中删除“订单”,我是否会遇到任何问题?
如果删除命令,它会使用默认的顺序(按字母顺序排列)。在你的例子中,显式顺序已经是按字母顺序排列的,所以它没有关系,但是如果你的显式顺序不是按字母顺序排列的,那么移除顺序属性会改变序列化顺序并破坏现有客户端。通常Order用于将与DataContract的不同版本对应的成员分组。 – Joe
我认为这就是我在寻找@Joe的答案。是否将与不同版本对应的成员分组在一起处理不同版本的数据合同的标准方法? – luxun
它在Microsoft最佳实践文档中提到:请参阅https://docs.microsoft.com/en-us/dotnet/framework/wcf/best-practices-data-data中的“不需要架构验证时的版本控制”一节中的8c-合同版本 – Joe