Share via


System.Runtime.Serialization.DataContractAttribute 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

DataContractAttribute 직렬화 및 역직렬화 작업에 사용되는 형식(클래스, 구조 또는 열거형)에 특성을 적용합니다DataContractSerializer. WCF(Windows Communication Foundation) 인프라를 사용하여 메시지를 보내거나 받는 경우 메시지에서 보낸 데이터를 보관하고 조작하는 모든 클래스에도 적용 DataContractAttribute 해야 합니다. 데이터 계약에 대한 자세한 내용은 데이터 계약 사용을 참조하세요.

또한 직렬화하려는 값을 보유하는 필드, 속성 또는 이벤트에도 적용 DataMemberAttribute 해야 합니다. 이를 적용하여 DataContractAttribute데이터를 직렬화하고 역직렬화할 수 있도록 명시적으로 설정합니다 DataContractSerializer .

주의

프라이빗 필드에 적용 DataMemberAttribute 할 수 있습니다. 필드에 의해 반환된 데이터(프라이빗인 경우에도)는 직렬화되고 역직렬화되므로 악의적인 사용자 또는 프로세스에서 보거나 가로챌 수 있습니다.

데이터 계약에 대한 자세한 내용은 데이터 계약 사용에 나열된 항목을 참조하세요.

데이터 계약

데이터 계약은 각 필드에 대한 이름 및 데이터 형식이 있는 필드 집합에 대한 추상 설명입니다. 데이터 계약은 서로 다른 플랫폼의 서비스가 상호 운용할 수 있도록 단일 구현 외부에 존재합니다. 서비스 간에 전달된 데이터가 동일한 계약을 준수하는 한 모든 서비스는 데이터를 처리할 수 있습니다. 이 처리를 느슨하게 결합된 시스템이라고도 합니다. 또한 데이터 계약은 애플리케이션에서 데이터를 처리할 수 있도록 데이터를 전달해야 하는 방법을 지정한다는 점에서 인터페이스와도 비슷합니다. 예를 들어 데이터 계약은 "FirstName" 및 "LastName"이라는 두 개의 텍스트 필드가 있는 "Person"이라는 데이터 형식을 호출할 수 있습니다. 데이터 계약을 만들려면 클래스에 DataContractAttribute 적용하고 serialize해야 하는 모든 필드 또는 속성에 적용 DataMemberAttribute 합니다. serialize될 때 데이터는 형식에 암시적으로 기본 제공되는 데이터 계약을 준수합니다.

참고 항목

데이터 계약은 상속 동작의 실제 인터페이스와 크게 다릅니다. 인터페이스는 파생된 형식에 의해 상속됩니다. 기본 클래스에 DataContractAttribute 적용할 때 파생된 형식은 특성 또는 동작을 상속하지 않습니다. 그러나 파생 형식에 데이터 계약이 있는 경우 기본 클래스의 데이터 멤버가 serialize됩니다. 그러나 파생 클래스의 DataMemberAttribute 새 멤버에 적용하여 직렬화할 수 있도록 해야 합니다.

XML 스키마 문서 및 SvcUtil 도구

다른 서비스와 데이터를 교환하는 경우 데이터 계약을 설명해야 합니다. 현재 버전의 DataContractSerializer경우 XML 스키마를 사용하여 데이터 계약을 정의할 수 있습니다. 다른 메타데이터/설명 형식을 사용할 수도 있습니다. 애플리케이션에서 XML 스키마를 만들려면 사용 합니다 ServiceModel Metadata 유틸리티 도구 (Svcutil.exe) 사용 하 여 합니다 /dconly 명령줄 옵션입니다. 도구에 대한 입력이 어셈블리인 경우 기본적으로 도구는 해당 어셈블리에 있는 모든 데이터 계약 형식을 정의하는 XML 스키마 집합을 생성합니다. 반대로 Svcutil.exe 도구를 사용하여 데이터 계약으로 표현할 수 있는 구문을 사용하는 XML 스키마의 요구 사항을 준수하는 Visual Basic 또는 C# 클래스 정의를 만들 수도 있습니다. 이 경우 /dconly 명령줄 옵션은 필요하지 않습니다.

Svcutil.exe 도구에 대한 입력이 XML 스키마인 경우 기본적으로 도구는 클래스 집합을 만듭니다. 이러한 클래스를 검사하면 해당 클래스가 적용된 것을 DataContractAttribute 확인할 수 있습니다. 그러한 클래스를 사용하여 다른 서비스와 교환해야 할 데이터를 처리하는 새로운 애플리케이션을 작성할 수 있습니다.

WSDL(Web Services Description Language) 문서를 반환하는 엔드포인트에 대해 도구를 실행하여 코드 및 구성을 자동으로 생성하여 WCF(Windows Communication Foundation) 클라이언트를 만들 수도 있습니다. 생성된 코드에는 .로 표시된 형식이 DataContractAttribute포함됩니다.

기존 형식 다시 사용

데이터 계약에는 안정적인 이름과 멤버 목록이라는 두 가지 기본 요구 사항이 있습니다. 안정적인 이름은 네임스페이스 URI(Uniform Resource Identifier)와 계약의 로컬 이름으로 구성됩니다. 기본적으로 클래스에 DataContractAttribute 적용하면 클래스 이름을 로컬 이름으로 사용하고 클래스의 네임스페이스(접두사로 접두사 "http://schemas.datacontract.org/2004/07/")를 네임스페이스 URI로 사용합니다. 및 Namespace 속성을 설정하여 기본값을 재정의할 Name 수 있습니다. 네임스페이스에 적용하여 네임스페이 ContractNamespaceAttribute 스를 변경할 수도 있습니다. 필요한 대로 데이터를 처리하지만 데이터 계약과 다른 네임스페이스 및 클래스 이름을 갖는 기존 형식이 있는 경우 이 기능을 사용합니다. 기본값을 재정의하여 기존 형식을 다시 사용하고 직렬화된 데이터가 데이터 계약을 준수하도록 할 수 있습니다.

참고 항목

모든 코드에서 더 긴 DataContractAttribute단어 대신 단어를 DataContract 사용할 수 있습니다.

버전 관리

데이터 계약은 이후 버전의 자체도 수용할 수 있습니다. 즉, 계약의 이후 버전에 추가 데이터가 포함되어 있으면 해당 데이터가 저장되고 그대로 보낸 사람에게 반환됩니다. 이렇게 하려면 인터페이스를 구현합니다 IExtensibleDataObject .

버전 관리에 대한 자세한 내용은 데이터 계약 버전 관리를 참조 하세요.