Pedido 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). Por vezes, pode ser necessário alterar esta ordem. Este tópico explica as regras de ordenação.
Regras básicas
As regras básicas para a encomenda 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, na ordem, estão os membros de dados do tipo atual que não têm a Order propriedade do DataMemberAttribute atributo definido, em ordem alfabética.
Em seguida, estão todos os membros de dados que têm a Order propriedade do DataMemberAttribute atributo definido. Estes são ordenados pelo valor da
Order
propriedade primeiro e depois alfabeticamente se houver mais de um membro de um determinadoOrder
valor. Os valores da encomenda podem ser ignorados.
A ordem alfabética é estabelecida chamando o CompareOrdinal método.
Exemplos
Considere o seguinte código.
[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>