Ordem de membro de dados

Em alguns aplicativos, é útil saber a ordem na qual os dados dos vários membros de dados são enviados ou devem ser recebidos (como a ordem em que os dados aparecem no XML serializado). Às vezes, pode ser necessário alterar essa ordem. Este tópico explica as regras de ordenação.

Regras básicas

As regras básicas para ordenação de dados incluem:

  • Se um tipo de contrato de dados fizer parte de uma hierarquia de herança, os membros de dados de seus tipos base serão sempre os primeiros na ordem.

  • Em seguida, os membros de dados do tipo atual que não têm a propriedade Order do conjunto de atributos DataMemberAttribute, estão em ordem alfabética.

  • Em seguida, estão todos os membros de dados que têm a propriedade Order do conjunto de atributos DataMemberAttribute. Eles são ordenadas pelo valor da propriedade Order primeiro e, em seguida, em ordem alfabética, se houver mais de um membro de um determinado valor Order. Valores de ordem podem ser ignorados.

A ordem alfabética é estabelecida chamando o método CompareOrdinal.

Exemplos

Considere o código a seguir.

[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

O XML produzido é semelhante ao seguinte.

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

Confira também