데이터 계약 직렬 변환기에서 지원하는 형식

WCF(Windows Communication Foundation)는 DataContractSerializer를 기본 serialization 엔진으로 사용하여 데이터를 XML로 변환하고 XML을 다시 데이터로 변환합니다. DataContractSerializer데이터 계약 형식을 serialize하도록 디자인되었습니다. 그러나 암시적 데이터 계약이 있는 것으로 간주될 수 있는 여러 가지 다른 형식을 지원합니다. 다음은 serialize할 수 있는 형식의 전체 목록입니다.

부분 신뢰 모드에서 특정 형식의 사용 제한

다음은 부분 신뢰 모드 시나리오에서 특정 형식을 사용할 때의 제한 사항을 나열한 것입니다.

  • ISerializable 를 사용하여 부분 신뢰 코드에서 DataContractSerializer 을 구현하는 형식을 직렬화 또는 역직렬화하려면 SerializationFormatterUnmanagedCode 권한이 필요합니다.

  • 부분 신뢰 모드에서 WCF 코드를 실행할 때 readonly 필드(publicprivate 둘 다)의 serialization 및 deserialization은 지원되지 않습니다. 이는 생성된 IL을 확인할 수 없어서 상승된 권한이 필요하기 때문입니다.

  • DataContractSerializerXmlSerializer 는 모두 부분 신뢰 환경에서 지원됩니다. 그러나 DataContractSerializer 의 사용은 다음 조건에 따라 결정됩니다.

    • serialize할 수 있는 모든 [DataContract] 형식은 public이어야 합니다.

    • [DataMember] 형식의 serialize할 수 있는 모든 [DataContract] 필드 또는 속성은 public이고 읽기/쓰기가 가능해야 합니다. readonly 필드의 serialization 및 deserialization은 부분 신뢰 애플리케이션에서 WCF를 실행하는 경우 지원되지 않습니다.

    • [Serializable]/ISerializable] 프로그래밍 모델은 부분 신뢰 환경에서 지원되지 않습니다.

    • 코드 또는 시스템 수준 구성(Machine.config)에서는 알려진 형식을 지정해야 합니다. 보안상의 이유로 애플리케이션 수준 구성에서는 알려진 형식을 지정할 수 없습니다.

  • IObjectReference 를 구현하는 형식은 GetRealObject 메서드에서 보안 권한 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]를 필요로 하기 때문에 부분 신뢰 환경에서 예외를 throw합니다.

Serialization에 대한 참고 사항

다음 규칙은 데이터 계약 Serializer에서 지원하는 형식에도 적용됩니다.

  • 제네릭 형식은 데이터 계약 serializer에서 완전히 지원됩니다.

  • Nullable .값 형식은 데이터 계약 serializer에서 완전히 지원됩니다.

  • 인터페이스 형식은 Object 또는 컬렉션 형식(컬렉션 인터페이스의 경우)으로 처리됩니다.

  • 구조체와 클래스 모두 지원됩니다.

  • DataContractSerializerXmlSerializer 및 ASP.NET 웹 서비스에서 사용하는 프로그래밍 모델을 지원하지 않습니다. 특히 XmlElementAttributeXmlAttributeAttribute와 같은 특성을 지원하지 않습니다. 이 프로그래밍 모델을 지원하려면 WCF를 전환하여 DataContractSerializer 대신 XmlSerializer를 사용해야 합니다.

  • DBNull 형식은 특수한 방법으로 처리됩니다. singleton 형식이며, 역직렬화 시 역직렬 변환기가 singleton 제약 조건을 적용하고 singleton 인스턴스에 대한 모든 DBNull 참조를 가리킵니다. DBNull 은 serialize 가능한 형식이므로 SerializationFormatter 권한이 필요합니다.

참고 항목