Поделиться через


Порядок элементов данных

В некоторых приложениях полезно знать порядок передачи или предполагаемого приема данных от различных элементов данных (например, порядок, в котором данные появляются в сериализованной форме XML). Иногда может потребоваться изменить этот порядок. В этом разделе рассматриваются правила упорядочивания.

Основные правила

Ниже перечислены основные правила упорядочивания данных.

  • Если тип контракта данных является частью иерархии наследования, элементы данных базовых типов всегда идут первыми.

  • Затем следуют (в алфавитном порядке) элементы данных текущего типа, для которых не задано свойство Order атрибута DataMemberAttribute.

  • Затем следуют любые элементы данных, для которых задано свойство Order атрибута DataMemberAttribute. Они упорядочиваются сначала по значению свойства Order и затем по алфавиту, если существует несколько элементов определенного значения Order. Значения свойства "Order" могут быть пропущены.

Алфавитный порядок устанавливается посредством вызова метода CompareOrdinal.

Примеры

Рассмотрим следующий код.

<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
[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;
}

Создаваемый XML-код подобен приведенному ниже.

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

См. также

Справочник

DataContractAttribute

Основные понятия

Эквивалентность контрактов данных
Использование контрактов данных