データ メンバーの順序Data Member Order

一部のアプリケーションでは、各種のデータ メンバーから送信される、または受信されると予想できるデータの順序 (たとえばシリアル化された XML でデータが表れる順序) がわかると便利です。In some applications, it is useful to know the order in which data from the various data members is sent or is expected to be received (such as the order in which data appears in the serialized XML). この順序を変更する必要が生じることもあります。Sometimes it may be necessary to change this order. ここでは、このような順序を決定する規則について説明します。This topic explains the ordering rules.

基本的な規則Basic Rules

データの順序を決定する基本的な規則には、次のようなものがあります。The basic rules for data ordering include:

  • データ コントラクト型が継承階層の一部である場合、その基本型のデータ メンバーが常に最初の順番になります。If a data contract type is a part of an inheritance hierarchy, data members of its base types are always first in the order.

  • 次に来るのは Order 属性の DataMemberAttribute プロパティが設定されていない、現在の型のデータ メンバー (アルファベット順) になります。Next in order are the current type’s data members that do not have the Order property of the DataMemberAttribute attribute set, in alphabetical order.

  • その次に来るのは、Order 属性の DataMemberAttribute プロパティが設定されているすべてのデータ メンバーです。Next are any data members that have the Order property of the DataMemberAttribute attribute set. これらのデータ メンバーはまず Order プロパティの値によって並べられ、次に特定の Order 値を持つメンバーが複数ある場合は、そのアルファベット順に並びます。These are ordered by the value of the Order property first and then alphabetically if there is more than one member of a certain Order value. Order 値はスキップされることがあります。Order values may be skipped.

アルファベット順は、CompareOrdinal メソッドを呼び出すことによって確立されます。Alphabetical order is established by calling the CompareOrdinal method.

使用例Examples

次のコードについて考えてみましょう。Consider the following code.

[DataContract]
public class BaseType
{

    [DataMember]
    public string zebra;
}
[DataContract]
public class DerivedType : BaseType
{
    [DataMember(Order = 0)]
    public string bird;
    [DataMember(Order = 1)]
    public string parrot;
    [DataMember]
    public string dog;
    [DataMember(Order = 3)]
    public string antelope;
    [DataMember]
    public string cat;
    [DataMember(Order = 1)]
    public string albatross;
}
<DataContract()> _
Public Class BaseType
    <DataMember()> Public zebra As String
End Class

<DataContract()> _
Public Class DerivedType
    Inherits BaseType
    <DataMember(Order:=0)> Public bird As String
    <DataMember(Order:=1)> Public parrot As String
    <DataMember()> Public dog As String
    <DataMember(Order:=3)> Public antelope As String
    <DataMember()> Public cat As String
    <DataMember(Order:=1)> Public albatross As String
End Class

作成される XML は、次のようになります。The XML produced is similar to the following.

<DerivedType>  
    <!-- Zebra is a base data member, and appears first. -->  
    <zebra/>   

    <!-- Cat has no Order, appears alphabetically first. -->  
    <cat/>  

   <!-- Dog has no Order, appears alphabetically last. -->  
    <dog/>   

    <!-- Bird is the member with the smallest Order value -->  
    <bird/>  

    <!-- Albatross has the next Order value, alphabetically first. -->  
    <albatross/>  

    <!-- Parrot, with the next Order value, alphabetically last. -->  
     <parrot/>  

    <!-- Antelope is the member with the highest Order value. Note that   
    Order=2 is skipped -->  
     <antelope/>   
</DerivedType>  

関連項目See Also

DataContractAttribute
データ コントラクトの等価性Data Contract Equivalence
データ コントラクトの使用Using Data Contracts