정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

DataContractAttribute 클래스

2013-12-13

형식이 데이터 계약을 정의하거나 구현하고 DataContractSerializer 등의 직렬 변환기에서 직렬화될 수 있도록 지정합니다.

System.Object
  System.Attribute
    System.Runtime.Serialization.DataContractAttribute

Namespace:  System.Runtime.Serialization
어셈블리:  System.Runtime.Serialization(System.Runtime.Serialization.dll)

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Enum|AttributeTargets.Struct, Inherited = false, 
	AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute

DataContractAttribute 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드DataContractAttributeDataContractAttribute 클래스의 새 인스턴스를 초기화합니다.
맨 위

  이름설명
Public 속성IsReference개체 참조 데이터를 유지할지 여부를 나타내는 값을 가져오거나 설정합니다.
Public 속성Name형식의 데이터 계약 이름을 가져오거나 설정합니다.
Public 속성Namespace형식에 대한 데이터 계약의 네임스페이스를 가져오거나 설정합니다.
맨 위

  이름설명
Public 메서드Equals인프라입니다. 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨)
Protected 메서드Finalize가비지 수집기에서 Object를 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetHashCode해당 인스턴스에 대한 해시 코드를 반환합니다. (Attribute에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드Match파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨)
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
맨 위

DataContractSerializer에 의한 직렬화 및 역직렬화 작업에 사용되는 형식(클래스, 구조 또는 열거형)에 DataContractAttribute 특성을 적용합니다. Windows Phone 인프라를 사용하여 메시지를 보내거나 받는 경우 메시지에 전송되는 데이터를 포함하고 조작하는 모든 클래스에 DataContractAttribute를 적용할 수도 있습니다.

또한 직렬화하려는 값을 포함하는 모든 필드, 속성 또는 이벤트에 DataMemberAttribute를 적용해야 합니다. DataContractAttribute를 적용하여 DataContractSerializer가 데이터를 명시적으로 직렬화 및 역직렬화할 수 있게 합니다.

데이터 계약

데이터 계약은 각 필드의 이름과 데이터 형식이 포함된 필드 집합에 대한 추상 설명입니다. 데이터 계약은 서로 다른 플랫폼의 서비스가 상호 운용될 수 있도록 하는 모든 단일 구현 외부에 있습니다. 서비스 간에 전달되는 데이터가 동일한 계약을 준수하기만 하면 모든 서비스가 데이터를 처리할 수 있습니다. 이 처리를 느슨하게 연결된 시스템이라고도 합니다. 또한 데이터 계약은 응용프로그램에서 처리될 수 있도록 데이터를 전달하는 방법을 계약에서 지정하는 인터페이스와 유사합니다. 예를 들어 데이터 계약에서 FirstNameLastName이라는 두 개의 텍스트 필드가 있는 Person 데이터 형식을 호출할 수 있습니다. 데이터 계약을 만들려면 클래스에 DataContractAttribute를 적용하고, 직렬화해야 하는 모든 필드 또는 속성에 DataMemberAttribute를 적용합니다. 직렬화되면 데이터가 형식에 암시적으로 기본 제공된 데이터 계약을 준수합니다.

참고참고:

데이터 계약은 상속 동작에서 실제 인터페이스와 크게 다릅니다. 인터페이스는 모든 파생 형식에 상속됩니다. 기본 클래스에 DataContractAttribute를 적용할 경우 파생 형식은 특성이나 동작을 상속하지 않습니다. 그러나 파생 형식에 데이터 계약이 있을 경우 기본 클래스의 데이터 멤버는 직렬화됩니다. 하지만 파생 클래스의 새 멤버에 DataMemberAttribute를 적용하여 직렬화 가능하게 만들어야 합니다.

기존 형식 다시 사용

데이터 계약에는 두 가지 기본 요구 사항이 있습니다.

  • 안정적인 이름

  • 멤버 목록

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

참고참고:

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


// Define the data contract.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com", IsReference = true)]
public class User
{
    [DataMember(Name = "Last", EmitDefaultValue = true, IsRequired = true, Order = 2)]
    public string Name { get; set; }

    [DataMember(Order = 1)]
    public int Age { get; set; }

    public User() { }

    public User(string newName, int newAge)
    {
        Name = newName;
        Age = newAge;
    }
}


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.

표시: