Datenmember-Reihenfolge
Bei einigen Anwendungen ist es hilfreich, die Reihenfolge zu kennen, in der die Daten aus verschiedenen Datenmembern gesendet oder erwartet werden (wie z. B. die Reihenfolge, in der die Daten im serialisierten XML angezeigt werden). Manchmal kann es auch notwendig sein, diese Reihenfolge zu ändern. In diesem Thema werden die Sortierungsregeln beschrieben.
Grundregeln
Zu den grundlegenden Regeln für die Sortierung von Daten gehören u. a.:
Wenn ein Datenvertragstyp Teil einer Vererbungshierarchie ist, stehen die Datenmember der Basistypen immer am Anfang der Reihenfolge.
Danach folgen die Datenmember des aktuellen Typs, für die die Order-Eigenschaft des Attributs DataMemberAttribute nicht festgelegt ist, in alphabetischer Reihenfolge.
Dann folgen die Datenmember mit der Order-Eigenschaft der DataMemberAttributeAttributgruppe. Diese sind zunächst nach dem Wert der
Order
-Eigenschaft geordnet und dann alphabetisch, falls mehr als ein Member eines bestimmtenOrder
-Werts vorhanden ist. Die Reihenfolgenwerte können übersprungen werden.
Die alphabetische Reihenfolge wird erstellt, indem die CompareOrdinal-Methode aufgerufen wird.
Beispiele
Betrachten Sie folgenden 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
Das generierte XML sieht ähnlich aus wie das folgende.
<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>