직렬화 가능 형식

기본적으로 DataContractSerializer는 공개적으로 표시되는 모든 형식을 serialize합니다. 이 경우 형식의 모든 공개 읽기/쓰기 속성과 필드가 serialize됩니다.

DataContractAttributeDataMemberAttribute 특성을 형식 및 멤버에 적용하여 기본 동작을 변경할 수 있습니다. 이 기능은 제어할 수 없거나 특성을 추가하도록 수정할 수 없는 형식이 있는 경우 유용할 수 있습니다. DataContractSerializer는 이러한 "표시되지 않은" 형식을 인식합니다.

Serialization 기본값

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

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

  • get 특성을 멤버에 적용하지 않으면 모든 공용 필드 및 공용 setIgnoreDataMemberAttribute메서드가 있는 속성이 serialize됩니다.

  • serialization 의미 체계는 XmlSerializer의 의미 체계와 유사합니다.

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

  • 읽기 전용 필드, get 또는 set 메서드가 없는 속성, 내부 또는 전용 set 또는 get 메서드가 있는 속성은 serialize되지 않습니다. 이러한 속성은 무시되고 예외가 throw되지 않습니다. get-only 컬렉션의 경우는 예외입니다.

  • XmlSerializer 특성(XmlElement, XmlAttribute, XmlIgnore, XmlInclude 등)이 무시됩니다.

  • 지정된 형식에 DataContractAttribute 특성을 적용하지 않는 경우 serializer는 DataMemberAttribute 특성이 적용되는 형식의 모든 멤버를 무시합니다.

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

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

상속

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

참고 항목