다음을 통해 공유


데이터 계약 스키마 참조

이 항목에서는 XML serialization에 대한 CLR(공용 언어 런타임) 형식을 설명하기 위해 DataContractSerializer에서 사용하는 XSD(XML 스키마) 하위 집합에 대해 설명합니다.

DataContractSerializer 매핑

DataContractSerializer는 메타데이터 끝점 또는 ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용하여 WCF(Windows Communication Foundation) 서비스에서 메타데이터를 내보낼 때 CLR 형식을 XSD에 매핑합니다. 자세한 내용은 데이터 계약 Serializer를 참조하십시오.

또한 WSDL(웹 서비스 기술 언어) 또는 XSD 문서에 액세스하여 서비스 또는 클라이언트에 대한 데이터 계약을 생성하기 위해 Svcutil.exe를 사용하는 경우 DataContractSerializer는 XSD를 CLR 형식에 매핑합니다.

이 문서에 명시된 요구 사항을 준수하는 XML 스키마 인스턴스만 DataContractSerializer를 사용하여 CLR 형식에 매핑할 수 있습니다.

지원 수준

DataContractSerializer는 지정된 XML 스키마 기능에 대해 다음과 같은 수준의 지원을 제공합니다.

  • 지원. DataContractSerializer를 사용하여 이 기능에서 CLR 형식 또는 특성(또는 둘 다)으로 명시적 매핑이 지원됩니다.
  • 무시. DataContractSerializer가 가져온 스키마에 이 기능을 사용할 수 있지만 코드 생성에 영향을 주지는 않습니다.
  • 사용할 수 없음. DataContractSerializer는 이 기능을 사용하여 스키마 가져오기 작업을 지원하지 않습니다. 예를 들어, 이러한 기능을 사용하는 스키마를 통해 WSDL에 액세스하는 경우 Svcutil.exe는 대신 XmlSerializer로 대체됩니다. 이 기능은 기본적으로 설정됩니다.

일반 정보

  • 스키마 네임스페이스에 대해서는 XML 스키마(영문 페이지일 수 있음)에서 설명합니다. 이 문서에서는 접두사 "xs"가 사용됩니다.
  • 스키마 네임스페이스가 아닌 네임스페이스를 가진 특성은 무시됩니다.
  • 이 문서에서 설명한 주석을 제외한 모든 주석이 무시됩니다.

<xs:schema>: 특성

특성 DataContract

attributeFormDefault

무시됩니다.

blockDefault

무시됩니다.

elementFormDefault

정규화되어야 합니다. DataContractSerializer에서 스키마를 지원하려면 모든 요소가 정규화되어야 합니다. 각 개별 요소 선언 시 xs:schema/@elementFormDefault를 "qualified"로 설정하거나 xs:element/@form을 "qualified"로 설정하여 이 작업을 수행할 수 있습니다.

finalDefault

무시됩니다.

Id

무시됩니다.

targetNamespace

지원되며 데이터 계약 네임스페이스에 매핑됩니다. 이 특성을 지정하지 않으면 빈 네임스페이스가 사용됩니다. 예약된 네임스페이스 https://schemas.microsoft.com/2003/10/Serialization/일 수 없습니다.

version

무시됩니다.

<xs:schema>: 콘텐츠

콘텐츠 스키마

include

지원됩니다. DataContractSerializer는 xs:include 및 xs:import를 지원합니다. 그러나 Svcutil.exe는 로컬 파일에서 메타데이터를 로드할 때 다음 xs:include/@schemaLocationxs:import/@location 참조를 제한합니다. 이러한 경우 스키마 파일 목록은 include가 아닌 out-of-band 메커니즘을 통해 전달해야 합니다. include된 스키마 문서는 무시됩니다.

redefine

사용할 수 없습니다. 보안상의 이유로 DataContractSerializerxs:redefine을 사용할 수 없습니다. x:redefine을 사용하려면 schemaLocation을 따라야 합니다. 상황에 따라 DataContract를 사용하는 Svcutil.exe는 schemaLocation 사용을 제한합니다.

import

지원됩니다. DataContractSerializerxs:includexs:import를 지원합니다. 그러나 Svcutil.exe는 로컬 파일에서 메타데이터를 로드할 때 다음 xs:include/@schemaLocationxs:import/@location 참조를 제한합니다. 이러한 경우 스키마 파일 목록은 include가 아닌 out-of-band 메커니즘을 통해 전달해야 합니다. include된 스키마 문서는 무시됩니다.

simpleType

지원됩니다. xs:simpleType 단원을 참조하십시오.

complexType

지원되며 데이터 계약으로 매핑됩니다. xs:complexType 단원을 참조하십시오.

group

무시됩니다. DataContractSerializerxs:group, xs:attributeGroupxs:attribute 사용을 지원하지 않습니다. 이러한 선언은 xs:schema의 자식으로 무시되며 complexType 또는 기타 지원되는 구문 내에서 참조할 수 없습니다.

attributeGroup

무시됩니다. DataContractSerializerxs:group, xs:attributeGroupxs:attribute 사용을 지원하지 않습니다. 이러한 선언은 xs:schema의 자식으로 무시되며 complexType 또는 기타 지원되는 구문 내에서 참조할 수 없습니다.

element

지원됩니다. GED(전역 요소 선언)를 참조하십시오.

attribute

무시됩니다. DataContractSerializerxs:group, xs:attributeGroupxs:attribute 사용을 지원하지 않습니다. 이러한 선언은 xs:schema의 자식으로 무시되며 complexType 또는 기타 지원되는 구문 내에서 참조할 수 없습니다.

notation

무시됩니다.

복합 형식 – <xs:complexType>

일반 정보

각 복합 형식 <xs:complexType>은 데이터 계약에 매핑됩니다.

<xs:complexType>: 특성

특성 스키마

abstract

false이어야 합니다(기본값).

block

사용할 수 없습니다.

final

무시됩니다.

id

무시됩니다.

mixed

false이어야 합니다(기본값).

name

지원되며 데이터 계약 이름에 매핑됩니다. 이름에 마침표가 있는 경우 형식을 내부 형식에 매핑하려 합니다. 예를 들어, A.B라는 복합 형식은 A라는 데이터 계약 이름을 가진 형식의 내부 형식인 데이터 계약 형식으로 매핑되지만 이러한 데이터 계약 형식이 있는 경우에만 가능합니다. 둘 이상의 중첩 수준이 가능합니다. 예를 들어, A.B.C가 내부 형식일 수 있지만 AA.B가 모두 있는 경우에만 가능합니다.

<xs:complexType>: 콘텐츠

목차 스키마

simpleContent

확장을 사용할 수 없습니다.

제한은 anySimpleType에서만 허용됩니다.

complexContent

지원됩니다. "상속"을 참조하십시오.

group

사용할 수 없습니다.

all

사용할 수 없습니다.

choice

사용할 수 없습니다.

sequence

지원되며 데이터 계약의 데이터 멤버에 매핑됩니다.

attribute

한 가지 예외를 포함하여 use="prohibited"인 경우에도 사용할 수 없습니다. 표준 Serialization 스키마 네임스페이스에서 선택적 특성만 지원됩니다. 이러한 특성은 데이터 계약 프로그래밍 모델의 데이터 멤버에 매핑되지 않습니다. 현재 이러한 하나의 특성만 의미가 있으며, 여기에 대해서는 ISerializable 단원에서 설명합니다. 다른 특성은 모두 무시됩니다.

attributeGroup

사용할 수 없습니다. WCF v1 릴리스에서 DataContractSerializerxs:complexType 내의 attributeGroup 존재를 무시합니다.

anyAttribute

사용할 수 없습니다.

(비어 있음)

데이터 멤버 없이 데이터 계약에 매핑됩니다.

복합 형식의 <xs:sequence>: 특성

특성 스키마

id

무시됩니다.

maxOccurs

1이어야 합니다(기본값).

minOccurs

1이어야 합니다(기본값).

복합 형식의 <xs:sequence>: 콘텐츠

목차 스키마

element

각 인스턴스는 데이터 멤버에 매핑됩니다.

group

사용할 수 없습니다.

choice

사용할 수 없습니다.

sequence

사용할 수 없습니다.

any

사용할 수 없습니다.

(비어 있음)

데이터 멤버 없이 데이터 계약에 매핑됩니다.

요소 – <xs:element>

일반 정보

**<xs:element>**는 다음과 같은 컨텍스트에서 발생할 수 있습니다.

  • 이 요소는 <xs:sequence> 내에서 발생할 수 있으며, 일반(비컬렉션) 데이터 계약의 데이터 멤버에 대해 설명합니다. 이 경우 maxOccurs 특성은 1이어야 합니다. 0 값은 허용되지 않습니다.
  • 이 요소는 <xs:sequence> 내에서 발생할 수 있으며, 컬렉션 데이터 계약의 데이터 멤버에 대해 설명합니다. 이 경우 maxOccurs 특성은 1보다 크거나 "unbounded"여야 합니다.
  • 이 요소는 <xs:schema> 내에서 GED(전역 요소 선언)로 발생할 수 있습니다.

<xs:sequence>(데이터 멤버) 내에서 maxOccurs=1의 <xs:element>

특성 스키마

ref

사용할 수 없습니다.

name

지원되며 데이터 멤버 이름에 매핑됩니다.

type

지원되며 데이터 멤버 형식에 매핑됩니다. 자세한 내용은 형식/기본 매핑을 참조하십시오. 지정되지 않고 요소에 익명 형식이 없는 경우 xs:anyType으로 간주됩니다.

block

무시됩니다.

default

사용할 수 없습니다.

fixed

사용할 수 없습니다.

form

정규화되어야 합니다. 이 특성은 xs:schema에서 elementFormDefault를 통해 설정할 수 있습니다.

id

무시됩니다.

maxOccurs

1

minOccurs

데이터 멤버의 IsRequired 속성에 매핑됩니다. minOccurs가 1인 경우 IsRequired는 true입니다.

nillable

형식 매핑에 영향을 줍니다. 형식/기본 매핑을 참조하십시오.

<xs:sequence>(컬렉션) 내에서 maxOccurs>1의 <xs:element>

컬렉션은 다음 형식 중 하나일 수 있습니다.

  • 정규 컬렉션(예: 배열)
  • 사전 컬렉션(값을 다른 값에 매핑. 예: Hashtable)
  • 사전과 키/값 쌍 형식의 배열 간 유일한 차이는 생성된 프로그래밍 모델에 있습니다. 지정된 형식이 사전 컬렉션임을 나타내는 데 사용할 수 있는 스키마 주석 메커니즘이 있습니다.

ref, block, default, fixed, formid 특성에 대한 규칙이 비컬렉션의 경우와 동일합니다. 기타 특성은 다음 표에 포함되어 있습니다.

특성 스키마

name

지원되며 CollectionDataContractAttribute 특성의 ItemName 속성에 매핑됩니다.

type

지원되며 컬렉션에 저장된 형식에 매핑됩니다.

maxOccurs

1보다 크거나 "unbounded"입니다. DC 스키마는 "unbounded"를 사용해야 합니다.

minOccurs

무시됩니다.

nillable

형식 매핑에 영향을 줍니다. 이 특성은 사전 컬렉션에서 무시됩니다.

<xs:schema> 전역 요소 선언 내의 <xs:element>

  • 스키마의 형식과 동일한 이름 및 네임스페이스가 있거나 익명 형식을 정의하는 GED(전역 요소 선언)가 형식과 연결된 것으로 간주합니다.
  • 스키마 내보내기: 연결된 GED가 생성된 모든 단순 및 복합 형식에 대해 생성됩니다.
  • Deserialization/serialization: 연결된 GED가 형식에 대해 루트 요소로 사용됩니다.
  • 스키마 가져오기: 다음 규칙을 따르는 경우(형식을 정의하지 않는 한) 연결된 GED가 필요 없으며 무시됩니다.
특성 스키마

abstract

연결된 GED에 대해 false이어야 합니다.

block

연결된 GED에서 사용할 수 없습니다.

default

연결된 GED에서 사용할 수 없습니다.

final

연결된 GED에 대해 false이어야 합니다.

fixed

연결된 GED에서 사용할 수 없습니다.

id

무시됩니다.

name

지원됩니다. 연결된 GED의 정의를 참조하십시오.

nillable

연결된 GED에 대해 true이어야 합니다.

substitutionGroup

연결된 GED에서 사용할 수 없습니다.

type

지원되며 요소에 익명 형식이 포함되어 있는 경우 연결된 GED의 연결된 형식과 일치해야 합니다.

<xs:element>: 콘텐츠

목차 스키마

simpleType

지원됩니다.*

complexType

지원됩니다.*

unique

무시됩니다.

key

무시됩니다.

keyref

무시됩니다.

(비어 있음)

지원됩니다.

* 익명 형식에 대해 simpleTypecomplexType, 매핑을 사용하는 것과 익명이 아닌 형식에 대해 사용한 것이 동일한 경우 익명 데이터 계약이 없는 경우를 제외하고 명명된 데이터 계약이 요소 이름에서 파생되어 생성된 이름으로 만들어 집니다. 다음 목록에는 익명 형식에 대한 규칙이 포함되어 있습니다.

  • WCF 구현 정보: xs:element 이름에 마침표가 없는 경우 익명 형식은 외부 데이터 계약 형식의 내부 형식에 매핑됩니다. 이름에 마침표가 있는 경우 결과 데이터 계약 형식은 내부 형식이 아닌 독립적입니다.
  • 내부 형식의 생성된 데이터 계약 이름은 외부 형식의 데이터 계약 이름 다음에 마침표, 요소 이름 및 문자열 "Type"이 옵니다.
  • 이러한 이름을 가진 데이터 계약이 이미 존재하는 경우 이름에 "1", "2", "3" 등을 추가하여 고유 이름으로 만듭니다.

단순 형식 - <xs:simpleType>

<xs:simpleType>: 특성

특성 스키마

final

무시됩니다.

id

무시됩니다.

name

지원되며 데이터 계약 이름에 매핑됩니다.

<xs:simpleType>: 콘텐츠

목차 스키마

restriction

지원됩니다. 열거형 데이터 계약에 매핑됩니다. 이 특성은 열거형 패턴과 일치하지 않는 경우 무시됩니다. xs:simpleType 제한 단원을 참조하십시오.

list

지원됩니다. 열거형 데이터 계약에 플래그됩니다. xs:simpleType 목록 단원을 참조하십시오.

union

사용할 수 없습니다.

<xs:restriction>

  • 복합 형식 제한은 base="xs:anyType"에만 지원됩니다.
  • xs:enumeration 이외의 제한 패싯이 없는 xs:string의 단순 형식 제한은 열거형 데이터 계약에 매핑됩니다.
  • 다른 모든 단순 형식 제한은 형식이 제한하는 형식에 매핑됩니다. 예를 들어, xs:int 제한은 xs:int가 제한하는 것처럼 정수로 매핑됩니다. 기본 형식 매핑에 대한 자세한 내용은 형식/기본 매핑을 참조하십시오.

<xs:restriction>: 특성

특성 스키마

base

지원되는 단순 형식 또는 xs:anyType이어야 합니다.

id

무시됩니다.

다른 모든 경우의 <xs:restriction>: 콘텐츠

목차 스키마

simpleType

있는 경우 지원되는 기본 형식에서 파생되어야 합니다.

minExclusive

무시됩니다.

minInclusive

무시됩니다.

maxExclusive

무시됩니다.

maxInclusive

무시됩니다.

totalDigits

무시됩니다.

fractionDigits

무시됩니다.

length

무시됩니다.

minLength

무시됩니다.

maxLength

무시됩니다.

enumeration

무시됩니다.

whiteSpace

무시됩니다.

pattern

무시됩니다.

(비어 있음)

지원됩니다.

열거형

열거형에 대한 <xs:restriction>: 특성

특성 스키마

base

있는 경우 xs:string이어야 합니다.

id

무시됩니다.

열거형에 대한 <xs:restriction>: 콘텐츠

목차 스키마

simpleType

있는 경우 데이터 계약(이 단원)에서 지원하는 열거형 제한이어야 합니다.

minExclusive

무시됩니다.

minInclusive

무시됩니다.

maxExclusive

무시됩니다.

maxInclusive

무시됩니다.

totalDigits

무시됩니다.

fractionDigits

무시됩니다.

length

사용할 수 없습니다.

minLength

사용할 수 없습니다.

maxLength

사용할 수 없습니다.

enumeration

지원됩니다. 열거형 "ID"는 무시되고 "value"는 열거형 데이터 계약의 값 이름에 매핑됩니다.

whiteSpace

사용할 수 없습니다.

pattern

사용할 수 없습니다.

(비어 있음)

지원되며 비어 있는 열거형 형식에 매핑됩니다.

다음 코드는 C# 열거형 클래스를 보여 줍니다.

public enum MyEnum
{
   first = 3,
   second = 4,
   third =5

}

이 클래스는 DataContractSerializer에 의해 다음 스키마에 매핑됩니다. 열거형 값이 1부터 시작하는 경우 xs:annotation 블록이 생성되지 않습니다.

<xs:simpleType name="MyEnum">
<xs:restriction base="xs:string">
 <xs:enumeration value="first">
  <xs:annotation>
   <xs:appinfo>
    <EnumerationValue 
     xmlns="https://schemas.microsoft.com/2003/10/Serialization/">
     3
    </EnumerationValue>
   </xs:appinfo>
  </xs:annotation>
 </xs:enumeration>
 <xs:enumeration value="second">
  <xs:annotation>
   <xs:appinfo>
    <EnumerationValue 
     xmlns="https://schemas.microsoft.com/2003/10/Serialization/">
     4
    </EnumerationValue>
   </xs:appinfo>
  </xs:annotation>
 </xs:enumeration> 
</xs:restriction>
</xs:simpleType>

<xs:list>

DataContractSerializerSystem.FlagsAttribute로 표시된 열거형 형식을 xs:string에서 파생된 xs:list에 매핑합니다. 다른 xs:list 변형은 지원되지 않습니다.

<xs:list>: 특성

특성 스키마

itemType

사용할 수 없습니다.

id

무시됩니다.

<xs:list>: 콘텐츠

목차 스키마

simpleType

xs:enumeration 패싯을 사용하는 xs:string에서의 제한이어야 합니다.

열거형 값이 2의 거듭제곱으로 진행되지 않는 경우(플래그의 경우 기본값) 값은 xs:annotation/xs:appInfo/ser:EnumerationValue 요소에 저장됩니다.

예를 들어, 다음 코드는 열거형 형식을 플래그합니다.

[Flags]
public enum AuthFlags
{  
  AuthAnonymous = 1,
  AuthBasic = 2,
  AuthNTLM = 4,
  AuthMD5 = 16,
  AuthPassport = 64,
}

이 형식이 다음 스키마에 매핑됩니다.

<xs:simpleType name="AuthFlags">
    <xs:list>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="AuthAnonymous" />
          <xs:enumeration value="AuthBasic" />
          <xs:enumeration value="AuthNTLM" />
          <xs:enumeration value="AuthMD5">
            <xs:annotation>
              <xs:appinfo>
                <EnumerationValue xmlns="https://schemas.microsoft.com/2003/10/Se
rialization/">16</EnumerationValue>
              </xs:appinfo>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="AuthPassport">
            <xs:annotation>
              <xs:appinfo>
                <EnumerationValue xmlns="https://schemas.microsoft.com/2003/10/Se
rialization/">64</EnumerationValue>
              </xs:appinfo>
            </xs:annotation>
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:list>
  </xs:simpleType>

상속

일반 규칙

데이터 계약을 다른 데이터 계약에서 상속할 수 있습니다. 이러한 데이터 계약은 기본 계약에 매핑되고 <xs:extension> XML 스키마 구문을 사용하여 확장 형식에 의해 파생됩니다.

데이터 계약을 컬렉션 데이터 계약에서 상속할 수 없습니다.

예를 들어, 다음 코드는 데이터 계약입니다.

[DataContract]
public class Person
{
  [DataMember]
  public string Name;
}
[DataContract]
public class Employee : Person 
{    
  [DataMember]
  public int ID;
}

이 데이터 계약은 다음 XML 스키마 형식 선언에 매핑됩니다.

<xs:complexType name="Employee">
 <xs:complexContent mixed="false">
  <xs:extension base="tns:Person">
   <xs:sequence>
    <xs:element minOccurs="0" name="ID" type="xs:int"/>
   </xs:sequence>
  </xs:extension>
 </xs:complexContent>
</xs:complexType>
<xs:complexType name="Person">
 <xs:sequence>
  <xs:element minOccurs="0" name="Name" 
    nillable="true" type="xs:string"/>
 </xs:sequence>
</xs:complexType>

<xs:complexContent>: 특성

특성 스키마

id

무시됩니다.

mixed

false이어야 합니다.

<xs:complexContent>: 콘텐츠

목차 스키마

restriction

base="xs:anyType"인 경우를 제외하고 사용할 수 없습니다. 후자는 xs:restriction의 콘텐츠를 xs:complexContent 컨테이너 바로 아래에 배치하는 것과 같습니다.

extension

지원됩니다. 데이터 계약 상속에 매핑됩니다.

<xs:complexContent>의 <xs:extension>: 특성

특성 스키마

id

무시됩니다.

base

지원됩니다. 이 형식이 상속되는 기본 데이터 계약 형식에 매핑됩니다.

<xs:complexContent>의 <xs:extension>: 콘텐츠

규칙은 <xs:complexType> 콘텐츠에서와 같습니다.

**<xs:sequence>**를 제공하는 경우 멤버 요소가 파생된 데이터 계약에 있는 추가 데이터 멤버에 매핑됩니다.

파생된 형식에 기본 형식의 요소와 동일한 이름을 가진 요소가 포함된 경우 중복 요소 선언이 고유하게 생성된 이름을 가진 데이터 멤버에 매핑됩니다. 고유한 이름을 찾을 때까지 양의 정수가 데이터 멤버 이름("member1", "member2" 등)에 추가됩니다. 반대의 경우는 다음과 같습니다.

  • 파생된 데이터 계약에 기본 데이터 계약의 데이터 멤버와 동일한 이름을 가진 데이터 멤버가 있는 경우 DataContractSerializer는 이 해당 요소를 파생된 형식으로 생성합니다.
  • 파생된 데이터 계약에 기본 데이터 계약의 데이터 멤버와 동일한 이름을 가졌지만 형식은 다른 데이터 멤버가 포함된 경우 DataContractSerializer는 기본 형식 및 파생된 형식 선언 모두에서 xs:anyType 형식의 요소와 함께 스키마를 가져옵니다. 원래 형식 이름은 xs:annotations/xs:appInfo/ser:ActualType/@Name에 유지됩니다.

이 두 변형을 통해 스키마는 모호한 콘텐츠 모델을 가질 수 있으며 각 데이터 멤버의 순서에 따라 달라집니다.

형식/기본 매핑

DataContractSerializer는 XML 스키마 기본 형식에 대해 다음 매핑을 사용합니다.

XSD 형식 .NET 형식

anyType

Object.

anySimpleType

String.

duration

TimeSpan.

dateTime

DateTime.

dateTimeOffset

오프셋의 경우 DateTimeTimeSpan. 아래 DateTimeOffset Serialization을 참조하십시오.

time

String.

date

String.

gYearMonth

String.

gYear

String.

gMonthDay

String.

gDay

String.

gMonth

String.

boolean

Boolean

base64Binary

Byte 배열입니다.

hexBinary

String.

float

Single.

double

Double.

anyURI

Uri.

QName

XmlQualifiedName.

string

String.

normalizedString

String.

token

String.

language

String.

Name

String.

NCName

String.

ID

String.

IDREF

String.

IDREFS

String.

ENTITY

String.

ENTITIES

String.

NMTOKEN

String.

NMTOKENS

String.

decimal

Decimal.

integer

Int64.

nonPositiveInteger

Int64.

negativeInteger

Int64.

long

Int64.

int

Int32.

short

Int16.

Byte

SByte.

nonNegativeInteger

Int64.

unsignedLong

UInt64.

unsignedInt

UInt32.

unsignedShort

UInt16.

unsignedByte

Byte.

positiveInteger

Int64.

ISerializable 형식 매핑

ISerializable은 .NET Framework 버전 1.0에서 지속성이나 데이터 전송을 위해 개체를 serialize하는 일반 메커니즘으로 새로 추가되었습니다. ISerializable을 구현하고 응용 프로그램 간에 전달할 수 있는 다양한 .NET Framework 형식이 있습니다. DataContractSerializer는 기본적으로 ISerializable 클래스에 대한 지원을 제공합니다. DataContractSerializer는 형식의 QName(정규화된 이름)에 의해서만 달라지는 효율적인 속성 컬렉션인 ISerializable 구현 스키마 형식을 매핑합니다. 예를 들어, DataContractSerializerExceptionhttp://schemas.datacontract.org/2004/07/System 네임스페이스에서 다음 XSD 형식에 매핑합니다.

<xs:complexType name="Exception">
 <xs:sequence>
  <xs:any minOccurs="0" maxOccurs="unbounded" 
      namespace="##local" processContents="skip"/>
 </xs:sequence>
 <xs:attribute ref="ser:FactoryType"/>
</xs:complexType>

데이터 계약 Serialization 스키마에서 선언한 선택적 특성 ser:FactoryType은 형식을 deserialize할 수 있는 팩터리 클래스를 참조합니다. 팩터리 클래스는 사용 중인 DataContractSerializer 인스턴스의 알려진 형식 컬렉션의 일부여야 합니다. 알려진 형식에 대한 자세한 내용은 데이터 계약 알려진 형식을 참조하십시오.

DataContract Serialization 스키마

DataContractSerializer에서 내보낸 여러 스키마는 다음과 같은 특별한 데이터 계약 Serialization 네임스페이스의 형식, 요소 및 특성을 사용합니다.

https://schemas.microsoft.com/2003/10/Serialization

다음은 전체 데이터 계약 Serialization 스키마 선언입니다.

<xs:schema attributeFormDefault="qualified"        
   elementFormDefault="qualified"      
   targetNamespace = 
    "https://schemas.microsoft.com/2003/10/Serialization/" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema"      
   xmlns:tns="https://schemas.microsoft.com/2003/10/Serialization/">

 <!-- Top-level elements for primitive types. -->
 <xs:element name="anyType" nillable="true" type="xs:anyType"/>
 <xs:element name="anyURI" nillable="true" type="xs:anyURI"/>
 <xs:element name="base64Binary" 
       nillable="true" type="xs:base64Binary"/>
 <xs:element name="boolean" nillable="true" type="xs:boolean"/>
 <xs:element name="byte" nillable="true" type="xs:byte"/>
 <xs:element name="dateTime" nillable="true" type="xs:dateTime"/>
 <xs:element name="decimal" nillable="true" type="xs:decimal"/>
 <xs:element name="double" nillable="true" type="xs:double"/>
 <xs:element name="float" nillable="true" type="xs:float"/>
 <xs:element name="int" nillable="true" type="xs:int"/>
 <xs:element name="long" nillable="true" type="xs:long"/>
 <xs:element name="QName" nillable="true" type="xs:QName"/>
 <xs:element name="short" nillable="true" type="xs:short"/>
 <xs:element name="string" nillable="true" type="xs:string"/>
 <xs:element name="unsignedByte" 
       nillable="true" type="xs:unsignedByte"/>
 <xs:element name="unsignedInt" 
       nillable="true" type="xs:unsignedInt"/>
 <xs:element name="unsignedLong" 
       nillable="true" type="xs:unsignedLong"/>
 <xs:element name="unsignedShort" 
       nillable="true" type="xs:unsignedShort"/>

 <!-- Primitive types introduced for certain .NET simple types. -->
 <xs:element name="char" nillable="true" type="tns:char"/>
 <xs:simpleType name="char">
  <xs:restriction base="xs:int"/>
 </xs:simpleType>

 <!-- xs:duration is restricted to an ordered value space, 
    to map to System.TimeSpan -->
 <xs:element name="duration" nillable="true" type="tns:duration"/>
 <xs:simpleType name="duration">
  <xs:restriction base="xs:duration">
   <xs:pattern 
     value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/>
   <xs:minInclusive value="-P10675199DT2H48M5.4775808S"/>
   <xs:maxInclusive value="P10675199DT2H48M5.4775807S"/>
  </xs:restriction>
 </xs:simpleType>
 
 <xs:element name="guid" nillable="true" type="tns:guid"/>
 <xs:simpleType name="guid">
  <xs:restriction base="xs:string">
   <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
  </xs:restriction>
 </xs:simpleType>
 
 <!-- This is used for schemas exported from ISerializable type. -->
 <xs:attribute name="FactoryType" type="xs:QName"/>
</xs:schema>

다음 항목에 주의해야 합니다.

  • ser:charChar 형식의 유니코드 문자를 표시하기 위해 도입됩니다.
  • xs:durationvaluespaceTimeSpan에 매핑될 수 있도록 정렬된 집합으로 축소됩니다.
  • FactoryTypeISerializable에서 파생된 형식에서 내보낸 스키마에서 사용됩니다.

DataContract가 아닌 스키마 가져오기

DataContractSerializer에는 DataContractSerializer XSD 프로필을 준수하지 않는 스키마를 가져올 수 있는 ImportXmlTypes 옵션이 포함되어 있습니다. Options 속성을 참조하십시오. 이 옵션을 true로 설정하면 맞지 않는 스키마 형식을 허용하고, 이러한 형식을 다음 구현에 매핑하고, IXmlSerializableXmlNode의 배열을 래핑할 수 있습니다(클래스 이름만 다름).

[GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")]
[System.Xml.Serialization.XmlRootAttribute(IsNullable=false)]
public partial class Person : object, IXmlSerializable
{  
  private XmlNode[] nodesField;  
  private static XmlQualifiedName typeName = 
new XmlQualifiedName("Person","http://Microsoft.ServiceModel.Samples");  
  public XmlNode[] Nodes
  {
    get {return this.nodesField;}
    set {this.nodesField = value;}
  }  
  public void ReadXml(XmlReader reader)
  {
    this.nodesField = XmlSerializableServices.ReadNodes(reader);
  }  
  public void WriteXml(XmlWriter writer)
  {
    XmlSerializableServices.WriteNodes(writer, this.Nodes);
  }  
  public System.Xml.Schema.XmlSchema GetSchema()
  {
    return null;
  }  
  public static XmlQualifiedName ExportSchema(XmlSchemaSet schemas)
  {
    XmlSerializableServices.AddDefaultSchema(schemas, typeName);
    return typeName;
  }
}

DateTimeOffset Serialization

DateTimeOffset은 기본 형식으로 취급되지 않습니다. 대신 두 부분으로 구성된 복합 요소로 serialize됩니다. 첫 번째 부분은 날짜/시간을 표시하고 두 번째 부분은 날짜/시간의 오프셋을 표시합니다. 다음 코드에서는 serialize된 DateTimeOffset 값의 예를 보여 줍니다.

<OffSet xmlns:a="http://schemas.datacontract.org/2004/07/System">
  <DateTime i:type="b:dateTime"  
    xmlns:b="http://www.w3.org/2001/XMLSchema">2008-08-28T08:00:00  
  </DateTime> 
  <OffsetMinutes i:type="b:short"  
   xmlns:b="http://www.w3.org/2001/XMLSchema">-480
   </OffsetMinutes> 
</OffSet>

스키마는 다음과 같습니다.

<xs:schema targetNamespace=”http://schemas.datacontract.org/2004/07/System”>
   <xs:complexType name=”DateTimeOffset”>
      <xs:sequence minOccurs="1" maxOccurs="1">
         <xs:element name="DateTime" type="xs:dateTime"
         minOccurs="1" maxOccurs="1" />
         <xs:elementname="OffsetMinutes" type="xs:short"
         minOccurs="1" maxOccurs="1" />
      </xs:sequence>
   </xs:complexType>
</xs:schema>

참고 항목

참조

DataContractSerializer
DataContractAttribute
DataMemberAttribute
XsdDataContractImporter

개념

데이터 계약 사용