데이터 멤버 순서
일부 애플리케이션에서는 serialize된 XML로 표시되는 데이터 순서와 같이 여러 데이터 멤버로부터 데이터가 전송 또는 수신되는 순서를 알고 있는 것이 좋습니다. 이 순서는 경우에 따라 변경해야 할 수 있습니다. 이 항목에서는 순서 지정 규칙에 대해 설명합니다.
기본 규칙
데이터의 순서를 지정하는 기본 규칙은 다음과 같습니다.
데이터 계약 형식이 상속 계층 구조의 일부이면 기본 형식의 데이터 멤버가 항상 첫 번째 순서입니다.
그 다음 순서는 Order 특성 집합의 DataMemberAttribute 속성을 갖고 있지 않은 현재 형식의 데이터 멤버(사전순)입니다.
그리고 Order 특성 집합의 DataMemberAttribute 속성을 가진 데이터 멤버가 그 다음 순서입니다. 이러한 멤버의 순서는 먼저
Order
속성 값으로 지정되고, 둘 이상의 멤버가 특정Order
값을 갖고 있으면 사전순으로 지정됩니다. 순서 값을 무시할 수도 있습니다.
사전순은 CompareOrdinal 메서드 호출로 설정됩니다.
예제
다음과 같은 코드를 생각해 볼 수 있습니다.
[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은 다음과 유사하게 생성됩니다.
<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>