다음을 통해 공유


데이터 계약 Serializer에서 지원하는 형식

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

  • 매개 변수를 사용하지 않는 생성자가 있는 모든 공개 형식

  • 데이터 계약 형식. 이러한 형식에는 DataContractAttribute 특성이 적용되었습니다. 일반적으로 데이터 계약 형식으로 만들어야 하는 비즈니스 개체를 나타내는 새 사용자 지정 형식입니다. 자세한 내용은 데이터 계약 사용serialize할 수 있는 형식를 참조하십시오.

  • 컬렉션 형식. 이 형식은 데이터 목록을 나타냅니다. 이러한 형식은 ArrayListDictionary 등의 컬렉션 형식이거나 일반 배열 형식일 수 있습니다. CollectionDataContractAttribute 특성은 이러한 형식의 serialization을 사용자 지정하는 데 사용할 수 있지만 반드시 필요하지는 않습니다. 자세한 내용은 데이터 계약의 컬렉션 형식을 참조하십시오.

  • 열거형 형식. 플래그 열거형을 비롯한 열거형은 serialize할 수 있습니다. 필요한 경우 열거형 형식을 DataContractAttribute 특성으로 표시할 수 있으며, 이 경우 serialization에 참여하는 모든 멤버를 EnumMemberAttribute 특성으로 표시해야 합니다. 표시하지 않은 멤버는 serialize되지 않습니다. 자세한 내용은 데이터 계약의 열거형 형식을 참조하십시오.

  • .NET Framework 기본 형식. .NET Framework에 기본 제공된 Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, ObjectString 형식은 모두 serialize할 수 있으며 기본 형식으로 간주됩니다.

  • 기타 기본 형식. 이러한 형식은 .NET Framework의 기본 형식은 아니지만 serialize된 XML 형식에서 기본 형식으로 처리됩니다. 이러한 형식은 DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedNameByte의 배열입니다.

    참고

    다른 기본 형식과 달리 DateTimeOffset은 기본적으로 알려진 형식이 아닙니다. 자세한 내용은 데이터 계약 알려진 형식을 참조하십시오.

  • SerializableAttribute 특성으로 표시된 형식입니다. .NET Framework 기본 클래스 라이브러리에 포함된 여러 형식이 이 범주에 해당합니다. DataContractSerializerISerializable 인터페이스 지원을 비롯하여 .NET Framework Remoting, BinaryFormatterSoapFormatter에서 사용된 이 serialization 프로그래밍 모델을 완전히 지원합니다.

  • 원시 XML을 나타내는 형식이거나 ADO.NET 관계형 데이터를 나타내는 형식입니다. XmlElementXmlNode 형식의 배열은 XML을 직접 나타내는 방식으로 지원됩니다. 또한, 관련된 XmlSchemaProviderAttribute 특성, XDocumentXElement 형식을 비롯하여 IXmlSerializable 인터페이스를 구현하는 형식이 지원됩니다. ADO.NET DataTable 형식과 DataSet 형식 및 형식화된 파생 클래스는 모두 IXmlSerializable 인터페이스를 구현하므로 이 범주에 속합니다. 자세한 내용은 데이터 계약의 XML 및 ADO.NET 형식을 참조하십시오.

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

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

  • DataContractSerializer를 사용하여 부분 신뢰 코드에서 ISerializable을 구현하는 형식을 serialize 또는 deserialize하려면 SerializationFormatterUnmanagedCode 권한이 필요합니다.
  • 부분 신뢰 모드에서 WCF 코드를 실행할 때 readonly 필드(publicprivate 둘 다)의 serialization 및 deserialization은 지원되지 않습니다. 이는 생성된 IL을 확인할 수 없어서 상승된 권한이 필요하기 때문입니다.
  • DataContractSerializerXmlSerializer는 둘 다 부분 신뢰 환경에서 지원됩니다. 그러나 DataContractSerializer의 사용은 다음 조건에 따라 결정됩니다.
    • serialize할 수 있는 모든 [DataContract] 형식은 public이어야 합니다.
    • [DataContract] 형식의 serialize할 수 있는 모든 [DataMember] 필드 또는 속성은 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 형식이며, deserialization 시 deserializer가 singleton 제약 조건을 적용하고 singleton 인스턴스에 대한 모든 DBNull 참조를 가리킵니다. DBNull은 serialize 가능한 형식이므로 SerializationFormatter 권한이 필요합니다.

참고 항목

개념

데이터 계약의 XML 및 ADO.NET 형식
데이터 계약 사용
serialize할 수 있는 형식
데이터 계약의 컬렉션 형식
데이터 계약의 열거형 형식