Windows Communication Foundation(WCF)에는 새로운 직렬화 엔진인 DataContractSerializer이 포함되어 있습니다. . DataContractSerializer
NET Framework 개체와 XML 간에 변환됩니다(양방향). WCF는 직렬 변환기 자체 외에도 연결된 스키마 가져오기 및 스키마 내보내기 메커니즘을 포함합니다.
스키마 는 직렬 변환기가 생성하거나 역직렬 변환기가 액세스할 수 있는 XML 셰이프에 대한 공식적이고 정확하며 컴퓨터에서 읽을 수 있는 설명입니다. WCF는 W3C(World Wide Web Consortium) XSD(XML 스키마 정의 언어)를 스키마 표현으로 사용하여 다양한 타사 플랫폼과 광범위하게 상호 운용할 수 있습니다.
스키마 가져오기 구성 요소는 XsdDataContractImporterXSD 스키마 문서를 사용하고 직렬화된 양식이 지정된 스키마에 해당하도록 .NET Framework 클래스(일반적으로 데이터 계약 클래스)를 생성합니다.
예를 들어 다음 스키마 조각이 있습니다.
XsdDataContractImporter importer = new XsdDataContractImporter();
importer.Options.Namespaces.Add(new KeyValuePair<string, string>("http://schemas.contoso.com/carSchema", "Contoso.Cars"));
Dim importer As New XsdDataContractImporter
importer.Options.Namespaces.Add(New KeyValuePair(Of String, String)("http://schemas.contoso.com/carSchema", "Contoso.Cars"))
는 다음 형식을 생성합니다(가독성을 높이기 위해 약간 간소화됨).
[DataContract]
public partial class Vehicle : IExtensibleDataObject
{
private int yearField;
private string colorField;
[DataMember]
public int year
{
get { return this.yearField; }
set { this.yearField = value; }
}
[DataMember]
public string color
{
get { return this.colorField; }
set { this.colorField = value; }
}
private ExtensionDataObject extensionDataField;
public ExtensionDataObject ExtensionData
{
get { return this.extensionDataField; }
set { this.extensionDataField = value; }
}
}
Partial Class Vehicle
Implements IExtensibleDataObject
Private yearField As Integer
Private colorField As String
<DataMember()> _
Public Property year() As Integer
Get
Return Me.yearField
End Get
Set
Me.yearField = value
End Set
End Property
<DataMember()> _
Public Property color() As String
Get
Return Me.colorField
End Get
Set
Me.colorField = value
End Set
End Property
Private extensionDataField As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set(ByVal value As ExtensionDataObject)
Me.extensionDataField = value
End Set
End Property
End Class
생성된 형식은 몇 가지 데이터 계약 모범 사례( 모범 사례: 데이터 계약 버전 관리)를 따릅니다.
형식은 IExtensibleDataObject 인터페이스를 구현합니다. 자세한 내용은 Forward-Compatible 데이터 계약을 참조하세요.
데이터 멤버는 프라이빗 필드를 래핑하는 공용 속성으로 구현됩니다.
클래스는 부분 클래스이며 생성된 코드를 수정하지 않고도 추가할 수 있습니다.
XsdDataContractExporter를 사용하여 DataContractSerializer
로 직렬화 가능한 형식을 XSD 스키마 문서로 생성할 수 있습니다.
충실도가 보장되지 않음
스키마 또는 형식이 전체 충실도로 왕복을 하는 것은 보장되지 않습니다. ( 왕복 은 스키마를 가져와 클래스 집합을 만들고 결과를 내보내 스키마를 다시 만드는 것을 의미합니다.) 동일한 스키마가 반환되지 않을 수 있습니다. 프로세스를 되돌리는 것도 충실도를 유지하도록 보장되지 않습니다. (형식을 내보내 해당 스키마를 생성한 다음 형식을 다시 가져옵니다. 동일한 형식이 반환될 가능성은 낮습니다.)
지원되는 형식
데이터 계약 모델은 WC3 스키마의 제한된 하위 집합만 지원합니다. 이 하위 집합을 준수하지 않는 스키마는 가져오기 프로세스 중에 예외를 발생합니다. 예를 들어 데이터 계약의 데이터 멤버를 XML 특성으로 serialize하도록 지정할 수 있는 방법은 없습니다. 따라서 XML 특성을 사용해야 하는 스키마는 지원되지 않으며 올바른 XML 프로젝션을 사용하여 데이터 계약을 생성할 수 없으므로 가져오기 중에 예외가 발생합니다.
예를 들어 기본 가져오기 설정을 사용하여 다음 스키마 조각을 가져올 수 없습니다.
<xs:complexType name="Vehicle">
<xs:sequence>
<xs:element name="year" type="xs:int" />
<xs:element name="color" type="xs:string" />
</xs:sequence>
<xs:attribute name="engineHorsePower" type="xs:int" />
</xs:complexType>
자세한 내용은 데이터 계약 스키마 참조를 참조하세요. 스키마가 데이터 계약 규칙을 준수하지 않는 경우 다른 serialization 엔진을 사용합니다. 예를 들어 XmlSerializer 자체적으로 별도의 스키마 가져오기 메커니즘을 사용합니다. 또한 지원되는 스키마 범위가 확장되는 특수 가져오기 모드가 있습니다. 자세한 내용은 IXmlSerializable 위해 스키마 가져오기에서 형식을 생성하는 방법에 대한 섹션을 참조하세요.
XsdDataContractExporter
는 DataContractSerializer
을 사용하여 직렬화할 수 있는 모든 .NET Framework 형식을 지원합니다. 자세한 내용은 데이터 계약 직렬 변환기에서 지원하는 형식을 참조하세요.
XsdDataContractExporter
를 사용하여 생성된 스키마는 일반적으로 XsdDataContractImporter
에서 유효한 데이터로 사용할 수 있습니다. 단, XmlSchemaProviderAttribute가 스키마를 사용자 지정하는 데 사용된 경우는 예외입니다.
사용 XsdDataContractImporter방법에 대한 자세한 내용은 클래스 생성을 위한 스키마 가져오기를 참조하세요.
사용 XsdDataContractExporter방법에 대한 자세한 내용은 클래스에서 스키마 내보내기를 참조하세요.