다음을 통해 공유


스키마 가져오기 및 내보내기

WCF(Windows Communication Foundation)에는 새로운 serialization 엔진인 DataContractSerializer가 포함되어 있습니다. DataContractSerializer는 .NET Framework 개체와 XML을 양방향으로 변환합니다. 이 serializer 이외에도, WCF에는 관련 스키마를 가져오고 내보내는 메커니즘이 있습니다. 스키마란 serializer가 생성하거나 deserializer가 액세스할 수 있는 XML 형태에 대한 설명으로, 시스템에서 인식할 수 있도록 정규화되고 세분화되어 있습니다. WCF에서는 여러 타사 플랫폼과 상호 운용할 수 있는 W3C(World Wide Web Consortium) XSD(XML 스키마 정의 언어)를 스키마 표현으로 사용합니다.

스키마 가져오기 구성 요소인 XsdDataContractImporter는 XSD 스키마 문서를 사용하고 일반적으로 데이터 계약 클래스인 .NET Framework 클래스를 생성하므로, serialize된 형태가 해당 스키마에 일치합니다.

예를 들어 다음과 같은 스키마 단편이 있습니다.

코드를 보다 쉽게 파악할 수 있도록 간소화된 다음과 같은 형식을 생성합니다.

생성된 형식은 다음과 같은 몇 가지 데이터 계약에 대한 최선의 방법(최선의 방법: 데이터 계약 버전 관리에 있음)을 따릅니다.

  • 생성된 형식을 통해 IExtensibleDataObject 인터페이스를 구현합니다. 자세한 내용은 이후 버전과 호환되는 데이터 계약를 참조하십시오.
  • 데이터 멤버는 private 필드를 래핑하는 public 속성으로 구현됩니다.
  • 클래스는 부분 클래스로, 생성된 코드를 수정하지 않고 추가 클래스를 만들 수 있습니다.

XsdDataContractExporter를 사용하면 반대로 작업할 수 있습니다. 즉 DataContractSerializer로 serialize할 수 있는 형식을 사용하고 XSD 스키마 문서를 생성할 수 있습니다.

정확도는 보장되지 않음

스키마나 형식을 통해 완벽히 정확한 라운드트립을 만든다고 보장할 수 없습니다. 라운드트립이란 클래스 집합을 만들기 위해 스키마를 가져오고 다시 스키마를 만들기 위해 그 결과를 내보내는 것을 의미하는데, 이 경우 동일한 스키마는 반환되지 않습니다. 이 프로세스를 반대로 해도 정확도는 보장되지 않습니다. (형식의 스키마를 생성하기 위해 형식을 내보낸 다음 그 형식을 다시 가져옵니다.) 이때도 동일한 형식은 반환되지 않을 것입니다.

지원 형식

데이터 계약 모델은 WC3 스키마의 제한된 하위 집합만 지원합니다. 이 하위 집합을 따르지 않는 스키마는 가져오기 프로세스 동안 예외를 발생시킵니다. 예를 들어 데이터 계약의 데이터 멤버가 XML 특성으로 serialize되도록 지정하는 방법이 없다고 가정합니다. 이 경우, XML 특성을 사용하도록 하는 스키마는 지원되지 않고, 올바른 XML 프로젝션으로 데이터 계약을 생성할 수 없으므로 가져오기 작업 동안 예외가 발생됩니다.

예를 들어 다음과 같은 스키마 단편은 가져오기 기본 설정을 사용하여 가져올 수 없습니다.

자세한 내용은 데이터 계약 스키마 참조을 참조하십시오. 스키마가 데이터 계약 규칙을 따르지 않으면 다른 serialization 엔진을 사용합니다. 예를 들어 XmlSerializer는 별도의 자체 스키마 가져오기 메커니즘을 사용합니다. 또한 지원되는 스키마 범위가 확장되는 특별한 가져오기 모드도 있습니다. 자세한 내용은 스키마를 가져와 클래스 생성에서 IXmlSerializable 형식 생성에 대한 단원을 참조하십시오.

XsdDataContractExporterDataContractSerializer로 serialize할 수 있는 모든 .NET Framework 형식을 지원합니다. 자세한 내용은 데이터 계약 Serializer에서 지원하는 형식를 참조하십시오. XmlSchemaProviderAttribute를 사용하여 스키마를 생성하지 않는 이상, XsdDataContractExporter를 통해 생성된 스키마는 일반적으로 XsdDataContractImporter가 사용할 수 있는 유효한 데이터가 됩니다.

XsdDataContractImporter 사용에 대한 자세한 내용은 스키마를 가져와 클래스 생성을 참조하십시오.

XsdDataContractExporter 사용에 대한 자세한 내용은 클래스에서 스키마 내보내기를 참조하십시오.

참고 항목

참조

DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter

개념

스키마를 가져와 클래스 생성
클래스에서 스키마 내보내기