Dela via


Beställning av datamedlem

I vissa program är det användbart att känna till i vilken ordning data från de olika datamedlemmarna skickas eller förväntas tas emot (till exempel i vilken ordning data visas i serialiserad XML). Ibland kan det vara nödvändigt att ändra den här ordningen. I det här avsnittet beskrivs ordningsreglerna.

Grundläggande regler

De grundläggande reglerna för dataordning är:

  • Om en datakontraktstyp är en del av en arvshierarki är datamedlemmar av dess bastyper alltid först i ordningen.

  • Nästa i ordning är den aktuella typens datamedlemmar som inte har Order egenskapen för attributuppsättningen DataMemberAttribute , i alfabetisk ordning.

  • Nästa är alla datamedlemmar som har Order egenskapen för attributuppsättningen DataMemberAttribute . Dessa sorteras efter värdet för Order egenskapen först och sedan alfabetiskt om det finns mer än en medlem av ett visst Order värde. Ordervärden kan hoppas över.

Alfabetisk ordning upprättas genom att metoden anropas CompareOrdinal .

Exempel

Ta följande kod som exempel.

[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-koden som skapas liknar följande.

<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>  

Se även