WCF(Windows Communication Foundation)는 기본 serialization 엔진으로 사용하여 DataContractSerializer 데이터를 XML로 변환하고 XML을 다시 데이터로 변환합니다. DataContractSerializer는 데이터 계약 형식을 직렬화하도록 설계되었습니다. 그러나 암시적 데이터 계약을 갖는 것으로 생각할 수 있는 다른 많은 형식을 지원합니다. 다음은 serialize할 수 있는 형식의 전체 목록입니다.
매개 변수가 없는 생성자가 있는 모든 공개적으로 표시되는 형식입니다.
데이터 계약 형식입니다. DataContractAttribute 속성이 적용된 형식들입니다. 비즈니스 개체를 나타내는 새 사용자 지정 형식은 일반적으로 데이터 계약 형식으로 만들어야 합니다. 자세한 내용은 데이터 계약 및 직렬화 가능 형식 사용을 참조하세요.
컬렉션 형식 데이터 목록을 나타내는 형식입니다. 이러한 배열은 형식의 일반 배열 또는 컬렉션 형식(예: ArrayList 및 Dictionary<TKey,TValue>.)일 수 있습니다. 이 특성은 CollectionDataContractAttribute 이러한 형식의 serialization을 사용자 지정하는 데 사용할 수 있지만 필수는 아닙니다. 자세한 내용은 데이터 계약의 컬렉션 형식을 참조하세요.
열거형 유형. 플래그 열거형을 포함한 열거형은 직렬화할 수 있습니다. 필요에 따라 열거형 형식을 특성으로 DataContractAttribute 표시할 수 있습니다. 이 경우 serialization에 참여하는 모든 멤버는 특성으로 EnumMemberAttribute 표시되어야 합니다. 표시되지 않은 멤버는 serialize되지 않습니다. 자세한 내용은 데이터 계약의 열거형 형식을 참조하세요.
.NET Framework 기본 형식입니다. .NET Framework에 기본 제공된 형식은 모두 직렬화될 수 있으며 기본 형식으로 간주됩니다: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object, 및 String.
기타 기본 형식입니다. 이러한 형식은 .NET Framework의 기본 형식이 아니지만 serialize된 XML 형식의 기본 형식으로 처리됩니다. 이러한 유형은 DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName 및 Byte의 배열입니다.
비고
다른 기본 형식 DateTimeOffset 과 달리 기본적으로 알려진 형식은 아닙니다. 자세한 내용은 데이터 계약 알려진 형식을 참조하세요).
SerializableAttribute 속성으로 표시된 유형. .NET Framework 기본 클래스 라이브러리에 포함된 많은 형식은 이 범주에 속합니다. .NET Framework 원격 통신 및 DataContractSerializer, BinaryFormatter에서 사용한 이 serialization 프로그래밍 모델을 완전히 지원하며, SoapFormatter 인터페이스에 대한 지원도 포함됩니다.
원시 XML을 나타내는 형식 또는 ADO.NET 관계형 데이터를 나타내는 형식입니다. XmlElement 형식 및 XmlNode 배열은 XML을 직접 나타내는 방법으로 지원됩니다. 또한 인터페이스를 IXmlSerializable 구현하는 형식은 관련 XmlSchemaProviderAttribute 특성 및 XDocumentXElement 형식을 포함하여 지원됩니다. ADO.NETDataTable 형식 및 DataSet 형식(형식화된 파생 클래스)은 모두 인터페이스를 IXmlSerializable 구현하므로 이 범주에 맞습니다. 자세한 내용은 데이터 계약의 XML 및 ADO.NET 형식을 참조하세요.
부분 신뢰 모드에서 특정 형식 사용의 제한 사항
다음은 부분 신뢰 모드 시나리오에서 특정 형식을 사용하는 경우의 제한 사항 목록입니다.
ISerializable 및 DataContractSerializer 권한이 필요하며, SerializationFormatter을 사용하여 부분적으로 신뢰할 수 있는 코드에서 UnmanagedCode을 구현하는 형식을 직렬화하거나 역직렬화해야 합니다.
부분 신뢰 모드에서 WCF 코드를 실행하는 경우 필드의
readonly
직렬화 및 역직렬화(둘 다public
및private
)는 지원되지 않습니다. 이는 생성된 IL을 검증할 수 없으므로 상승된 권한이 필요하기 때문입니다.DataContractSerializer XmlSerializer 부분 신뢰 환경에서 둘 다 지원됩니다. 그러나 DataContractSerializer 사용은 다음과 같은 조건이 적용됩니다.
직렬화 가능한
[DataContract]
모든 형식은 public이어야 합니다.모든 직렬화 가능한
[DataMember]
필드 또는 속성은[DataContract]
형식 내에서 공개적이며 읽기/쓰기가 가능해야 합니다. 부분적으로 신뢰할 수 있는 애플리케이션에서 WCF를 실행할 때는 필드의readonly
직렬화 및 역직렬화가 지원되지 않습니다.[Serializable]
/ISerializable]
프로그래밍 모델은 부분 신뢰 환경에서 지원되지 않습니다.알려진 형식은 코드 또는 컴퓨터 수준 구성(
Machine.config
)에서 지정해야 합니다. 알려진 형식은 보안상의 이유로 애플리케이션 수준 구성에서 지정할 수 없습니다.
IObjectReference을(를) 구현하는 형식은 메서드 GetRealObject가 보안 권한
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
을(를) 필요로 하기 때문에 부분적으로 신뢰할 수 있는 환경에서 예외를 던집니다.
Serialization에 대한 추가 정보
다음 규칙은 데이터 계약 직렬 변환기에서 지원하는 형식에도 적용됩니다.
제네릭 형식은 데이터 계약 직렬 변환기에서 완전히 지원됩니다.
Nullable 값 형식은 데이터 계약 직렬 변환기에서 완전히 지원됩니다.
인터페이스 형식은 Object 로 처리되거나, 컬렉션 인터페이스의 경우에는 컬렉션 형식으로 처리됩니다.
구조체와 클래스가 모두 지원됩니다.
DataContractSerializer는 XmlSerializer 및 ASP.NET 웹 서비스에서 사용하는 프로그래밍 모델을 지원하지 않습니다. 특히 다음과 같은 XmlElementAttributeXmlAttributeAttribute특성은 지원하지 않습니다. 이 프로그래밍 모델을 지원하려면 WCF를 XmlSerializer 대신 DataContractSerializer를 사용하도록 전환해야 합니다.
형식은 DBNull 특별한 방식으로 처리됩니다. 싱글톤 타입이며, 역직렬화 시 디시리얼라이저는 싱글톤 제약 조건을 준수하고 모든
DBNull
참조를 싱글톤 인스턴스를 가리킵니다.DBNull
직렬화 가능한 형식이므로 사용 권한이 필요합니다SerializationFormatter.