System.Runtime.Serialization.DataContractSerializer 클래스

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

클래스를 DataContractSerializer 사용하여 형식의 인스턴스를 XML 스트림 또는 문서로 직렬화하고 역직렬화합니다. 예를 들어 이름 및 주소와 같은 필수 데이터가 포함된 속성으로 명명 Person 된 형식을 만들 수 있습니다. 그런 다음 클래스의 Person 인스턴스를 만들고 조작하고 나중에 검색할 수 있는 XML 문서 또는 즉시 전송을 위해 XML 스트림에서 모든 속성 값을 작성할 수 있습니다. 가장 중요한 DataContractSerializer 것은 WCF(Windows Communication Foundation) 메시지에서 보낸 데이터를 직렬화하고 역직렬화하는 데 사용됩니다. 클래스에 DataContractAttribute 특성을 적용하고 DataMemberAttribute 클래스 멤버에 특성을 적용하여 serialize되는 속성과 필드를 지정합니다.

serialize할 수 있는 형식 목록은 데이터 계약 직렬 변환기에서 지원하는 형식을 참조 하세요.

사용 DataContractSerializer하려면 먼저 클래스의 인스턴스와 형식을 쓰거나 읽는 데 적합한 개체(예: 인스턴스) XmlDictionaryWriter를 만듭니다. 그런 다음, 메서드를 WriteObject 호출하여 데이터를 유지합니다. 데이터를 검색하려면 데이터 형식(예: XML 문서용)을 읽는 데 적합한 개체를 XmlDictionaryReader 만들고 메서드를 호출합니다 ReadObject .

사용 DataContractSerializer방법에 대한 자세한 내용은 Serialization 및 Deserialization을 참조 하세요.

사용 하 여 데이터 계약 serializer의 형식을 설정할 수 있습니다 합니다 <dataContractSerializer> 클라이언트 애플리케이션 구성 파일의 요소입니다.

serialization 또는 deserialization을 위한 클래스 준비

DataContractSerializer 클래스와 함께 DataContractAttributeDataMemberAttribute 사용됩니다. serialization을 위해 클래스를 준비하려면 클래스에 DataContractAttribute 적용합니다. serialize할 데이터를 반환하는 클래스의 각 멤버에 대해 .를 적용합니다 DataMemberAttribute. 접근성에 관계없이 private, protected, internal, protected internal 또는 public과 관계없이 필드와 속성을 직렬화할 수 있습니다.

예를 들어, 스키마에서 Customer 속성을 사용하여 ID를 지정하는데 이미 기존 애플리케이션에서 Person 속성을 가진 Name이라는 형식을 사용할 경우가 있습니다. 계약을 준수하는 형식을 만들려면 먼저 클래스에 DataContractAttribute 적용합니다. 그런 다음 직렬화하려는 모든 필드 또는 속성에 적용 DataMemberAttribute 합니다.

참고 항목

프라이빗 및 퍼블릭 멤버 모두에 DataMemberAttribute 적용할 수 있습니다.

XML의 최종 형식은 텍스트일 필요가 없습니다. 대신 데이터를 DataContractSerializer XML 정보 세트로 씁니다. 이를 통해 데이터를 해당 및 XmlWriter에서 인식하는 모든 형식에 XmlReader 쓸 수 있습니다. 둘 다 작업하도록 최적화되어 있으므로 클래스와 XmlDictionaryWriter 클래스를 사용하여 XmlDictionaryReader 읽고 쓰는 것이 DataContractSerializer좋습니다.

serialization 또는 deserialization이 발생하기 전에 채워야 하는 필드 또는 속성이 있는 클래스를 만드는 경우 버전 내성 직렬화 콜백에 설명된 대로 콜백 특성을 사용합니다.

알려진 형식의 컬렉션에 추가

개체를 직렬화하거나 역직렬화할 때는 형식이 "알려진" 형식이 되도록 해야 합니다 DataContractSerializer. 먼저 구현 IEnumerable<T> 하는 클래스의 인스턴스(예: List<T>)를 만들고 알려진 형식을 컬렉션에 추가합니다. 그런 다음,(예DataContractSerializer(Type, IEnumerable<Type>): )를 사용하는 오버로드 중 하나를 사용하여 인스턴스 DataContractSerializerIEnumerable<T> 만듭니다.

참고 항목

다른 기본 형식 DateTimeOffset 과 달리 구조체는 기본적으로 알려진 형식이 아니므로 알려진 형식 목록에 수동으로 추가해야 합니다(데이터 계약 알려진 형식 참조).

이후 버전과의 호환성

이후 DataContractSerializer 버전의 계약과 호환되도록 설계된 데이터 계약을 이해합니다. 이러한 형식은 인터페이스를 구현합니다 IExtensibleDataObject . 인터페이스에는 개체를 ExtensionData 반환하는 속성이 있습니다 ExtensionDataObject . 자세한 내용은 호환 가능한 데이터 계약을 참조하세요.

부분 신뢰로 실행

역직렬화하는 동안 대상 개체를 인스턴스화 DataContractSerializer 할 때 대상 개체의 생성자를 호출하지 않습니다. 부분 신뢰(즉, 공용 및 특성이 적용된 어셈블리AllowPartiallyTrustedCallers)에서 액세스할 수 있고 일부 보안 관련 작업을 수행하는 [DataContract] 형식을 작성하는 경우 생성자가 호출되지 않는다는 점에 유의해야 합니다. 특히 다음 기술은 작동하지 않습니다.

  • 생성자를 내부 또는 프라이빗으로 만들거나 생성자에 추가하여 LinkDemand 부분 신뢰 액세스를 제한하려는 경우 부분 신뢰 하에서 역직렬화하는 동안 아무런 영향도 미치지 않습니다.
  • 생성자가 실행된 것으로 가정하는 클래스를 코딩하면 클래스가 악용 가능한 잘못된 내부 상태가 될 수 있습니다.