Порядок элементов данных
В некоторых приложениях полезно знать порядок передачи или предполагаемого приема данных от различных элементов данных (например, порядок, в котором данные появляются в сериализованной форме 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>
См. также
Справочник
Основные понятия
Эквивалентность контрактов данных
Использование контрактов данных