一部のアプリケーションでは、さまざまなデータ メンバーからデータが送信される順序や受信される順序 (シリアル化された XML にデータが表示される順序など) を把握すると便利です。 場合によっては、この順序を変更する必要があります。 このトピックでは、順序付け規則について説明します。
基本ルール
データの順序付けの基本的な規則は次のとおりです。
データ コントラクト型が継承階層の一部である場合、その基本型のデータ メンバーは常に最初の順序になります。
次に、DataMemberAttribute属性のOrder プロパティがアルファベット順に設定されていない現在の型のデータ メンバーを順番に示します。
次に、DataMemberAttribute属性セットのOrder プロパティを持つデータ メンバーを指定します。 これらは、最初に
Order
プロパティの値で並べ替えられた後、特定のOrder
値のメンバーが複数存在する場合はアルファベット順に並べ替えます。 順序の値はスキップされる場合があります。
アルファベット順は、 CompareOrdinal メソッドを呼び出すことによって確立されます。
例示
次のコードについて考えてみましょう。
[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 は次のようになります。
<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>