Order van gegevenslid
In sommige toepassingen is het handig om de volgorde te weten waarin gegevens van de verschillende gegevensleden worden verzonden of naar verwachting worden ontvangen (zoals de volgorde waarin gegevens worden weergegeven in de geserialiseerde XML). Soms kan het nodig zijn om deze volgorde te wijzigen. In dit onderwerp worden de bestelregels uitgelegd.
Basisregels
De basisregels voor het ordenen van gegevens zijn onder andere:
Als een gegevenscontracttype deel uitmaakt van een overnamehiërarchie, zijn gegevensleden van de basistypen altijd eerst in de volgorde.
Vervolgens zijn de gegevensleden van het huidige type die niet de Order eigenschap van de DataMemberAttribute kenmerkset hebben, in alfabetische volgorde.
Vervolgens zijn alle gegevensleden die de Order eigenschap van de DataMemberAttribute kenmerkset hebben. Deze worden eerst gerangschikt op de waarde van de
Order
eigenschap en vervolgens alfabetisch als er meer dan één lid van een bepaaldeOrder
waarde is. Orderwaarden kunnen worden overgeslagen.
Alfabetische volgorde wordt ingesteld door de methode aan CompareOrdinal te roepen.
Voorbeelden
Kijk eens naar de volgende 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
De gegenereerde XML is vergelijkbaar met de volgende.
<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>