기본적으로, DataContractSerializer는 모든 공개적으로 표시되는 형식을 직렬화합니다. 형식의 모든 공용 읽기/쓰기 속성 및 필드가 직렬화됩니다.
DataContractAttribute 및 DataMemberAttribute 특성을 형식과 멤버에 적용하여 기본 동작을 변경할 수 있습니다. 이 기능은 여러분이 관리하지 않는 형식이 있어 특성을 추가하기 위해 수정할 수 없는 상황에서 유용할 수 있습니다. 이러한 DataContractSerializer "표시되지 않은" 형식을 인식합니다.
Serialization 기본값
DataContractAttribute 및 DataMemberAttribute 특성을 적용하여 형식과 멤버의 serialization을 명시적으로 제어하거나 사용자 지정할 수 있습니다. 또한 이러한 특성을 프라이빗 필드에 적용할 수 있습니다. 그러나 이러한 특성으로 표시되지 않은 형식도 직렬화되고 역직렬화됩니다. 다음 규칙 및 예외가 적용됩니다.
새로 DataContractSerializer 만든 형식의 기본 속성을 사용하여 특성이 없는 형식에서 데이터 계약을 유추합니다.
해당 멤버에 특성을 적용하지 않는 한 모든 공용 필드와 public
get및set메서드가 있는 속성이 IgnoreDataMemberAttribute 직렬화됩니다.serialization 의미 체계는 XmlSerializer와 비슷합니다.
표시되지 않은 형식에서는 매개 변수가 없는 생성자가 있는 공용 형식만 serialize됩니다. 이 규칙에 대한 예외는 ExtensionDataObject 인터페이스와 IExtensibleDataObject 함께 사용됩니다.
읽기 전용 필드,
get또는set메서드가 없는 속성, 그리고 내부 또는 비공개set또는get메서드가 있는 속성은 직렬화되지 않습니다. 이러한 속성은 무시되며 get-only 컬렉션의 경우를 제외하고는 예외가 발생하지 않습니다.XmlSerializer특성(예:
XmlElement,XmlAttribute,XmlIgnoreXmlInclude등)은 무시됩니다.지정된 형식에 DataContractAttribute 속성을 적용하지 않으면, serializer는 해당 형식 내에서 DataMemberAttribute 속성이 적용된 모든 멤버를 무시합니다.
속성 KnownTypes은 DataContractAttribute 특성으로 표시되지 않은 형식의 지원됩니다. 여기에는 표시되지 않은 형식의 KnownTypeAttribute 특성에 대한 지원이 포함됩니다.
공용 멤버, 속성 또는 필드에 대한 serialization 프로세스를 "옵트아웃"하려면 해당 멤버에 특성을 적용 IgnoreDataMemberAttribute 합니다.
상속
표시되지 않은 형식(특성이 없는 DataContractAttribute 형식)은 이 특성이 있는 형식에서 상속할 수 있지만 반대로는 허용되지 않습니다. 특성이 있는 형식은 표시되지 않은 형식에서 상속할 수 없습니다. 이 규칙은 주로 이전 버전의 .NET Framework에서 작성된 코드와의 호환성을 보장하기 위해 적용됩니다.