다음을 통해 공유


직렬화 가능 형식

기본적으로, DataContractSerializer는 모든 공개적으로 표시되는 형식을 직렬화합니다. 형식의 모든 공용 읽기/쓰기 속성 및 필드가 직렬화됩니다.

DataContractAttributeDataMemberAttribute 특성을 형식과 멤버에 적용하여 기본 동작을 변경할 수 있습니다. 이 기능은 여러분이 관리하지 않는 형식이 있어 특성을 추가하기 위해 수정할 수 없는 상황에서 유용할 수 있습니다. 이러한 DataContractSerializer "표시되지 않은" 형식을 인식합니다.

Serialization 기본값

DataContractAttributeDataMemberAttribute 특성을 적용하여 형식과 멤버의 serialization을 명시적으로 제어하거나 사용자 지정할 수 있습니다. 또한 이러한 특성을 프라이빗 필드에 적용할 수 있습니다. 그러나 이러한 특성으로 표시되지 않은 형식도 직렬화되고 역직렬화됩니다. 다음 규칙 및 예외가 적용됩니다.

  • 새로 DataContractSerializer 만든 형식의 기본 속성을 사용하여 특성이 없는 형식에서 데이터 계약을 유추합니다.

  • 해당 멤버에 특성을 적용하지 않는 한 모든 공용 필드와 public getset 메서드가 있는 속성이 IgnoreDataMemberAttribute 직렬화됩니다.

  • serialization 의미 체계는 XmlSerializer와 비슷합니다.

  • 표시되지 않은 형식에서는 매개 변수가 없는 생성자가 있는 공용 형식만 serialize됩니다. 이 규칙에 대한 예외는 ExtensionDataObject 인터페이스와 IExtensibleDataObject 함께 사용됩니다.

  • 읽기 전용 필드, get 또는 set 메서드가 없는 속성, 그리고 내부 또는 비공개 set 또는 get 메서드가 있는 속성은 직렬화되지 않습니다. 이러한 속성은 무시되며 get-only 컬렉션의 경우를 제외하고는 예외가 발생하지 않습니다.

  • XmlSerializer특성(예: XmlElement, XmlAttribute, XmlIgnoreXmlInclude등)은 무시됩니다.

  • 지정된 형식에 DataContractAttribute 속성을 적용하지 않으면, serializer는 해당 형식 내에서 DataMemberAttribute 속성이 적용된 모든 멤버를 무시합니다.

  • 속성 KnownTypesDataContractAttribute 특성으로 표시되지 않은 형식의 지원됩니다. 여기에는 표시되지 않은 형식의 KnownTypeAttribute 특성에 대한 지원이 포함됩니다.

  • 공용 멤버, 속성 또는 필드에 대한 serialization 프로세스를 "옵트아웃"하려면 해당 멤버에 특성을 적용 IgnoreDataMemberAttribute 합니다.

상속

표시되지 않은 형식(특성이 없는 DataContractAttribute 형식)은 이 특성이 있는 형식에서 상속할 수 있지만 반대로는 허용되지 않습니다. 특성이 있는 형식은 표시되지 않은 형식에서 상속할 수 없습니다. 이 규칙은 주로 이전 버전의 .NET Framework에서 작성된 코드와의 호환성을 보장하기 위해 적용됩니다.

참고하십시오