C# 为甚么要指明「;订单“;关于一个;数据成员;?

C# 为甚么要指明「;订单“;关于一个;数据成员;?,c#,wcf,xml-serialization,C#,Wcf,Xml Serialization,我最近一直在处理一些可序列化类,它们通常如下所示: [DataContract] public class Foo { [DataMember(Order = 0)] public string Bar1 { get; set; } [DataMember(Order = 1)] public string Bar2 { get; set; } } 我想

我最近一直在处理一些可序列化类,它们通常如下所示:

[DataContract]
public class Foo
{
    [DataMember(Order = 0)]
    public string Bar1
    { 
        get; 
        set; 
    }

    [DataMember(Order = 1)]
    public string Bar2
    { 
        get; 
        set; 
    }
}
我想知道,有什么可能的应用程序可以指定数据成员的顺序?指导方针明确指出,“有时可能有必要改变这个顺序”,但没有给出任何时间或原因的例子。您是否有任何关于何时或为什么需要这样做的例子


在我的应用程序中,我只是序列化这些类型的对象并将它们保存到一个文件中。在这里指定“订单”是否有任何价值,或者它是否只是添加了其他要维护的内容?如果我只是从每个数据成员中删除“订单”,我会面临任何问题吗

顺序
指定数据成员序列化到对象中的顺序,否则它们将按字母顺序排列

在某些应用程序中,了解数据的顺序非常有用 发送或预期接收来自不同数据成员的数据 (例如数据在序列化XML中的显示顺序)

向具有预定义对象结构的客户端发送响应时,您希望对数据成员进行排序的场景之一

举个例子

有时您可能会感兴趣,首先显示ID字段(或类似字段),然后显示所有其他字段,以使原始xml看起来对最终用户友好

是的,如果你不提及订单,你不会得到任何错误


请参阅文档

如果删除订单,它将使用默认顺序(按字母顺序)。在您的示例中,显式顺序已经是字母顺序,所以这无关紧要,但是如果显式顺序不是字母顺序,那么删除order属性将更改序列化顺序并中断现有客户机。通常,Order用于对对应于不同版本的DataContract的成员进行分组。我想这就是我要寻找的@Joe的答案。将对应于不同版本的成员分组在一起是否是处理不同版本数据契约的标准方法?Microsoft最佳实践文档中提到了这一点:请参阅“不需要模式验证时的版本控制”一节中的8c当然,我理解这一点,但我想问的是,为什么您要指定一个订单?在一个用例的示例中,您会指定一个订单吗?