DataContractSerializer를 사용하여 직렬화 할 때 속성을 무시하려면 어떻게해야합니까? 클래스에 DataContract / DataMember 특성을 포함 할

.NET 3.5SP1 및 DataContractSerializer를 사용하여 클래스를 직렬화하고 있습니다. SP1에서는 클래스에 DataContract / DataMember 특성을 포함 할 필요가없고 전체 항목 만 직렬화하도록 동작을 변경했습니다. 이것이 제가 사용하고있는 동작이지만 이제는 serializer에서 하나의 속성을 무시해야합니다. 이 작업을 수행하는 한 가지 방법은 클래스에 DataContract 특성을 추가하고 포함하려는 모든 멤버에 DataMember 특성을 추가하는 것입니다. 그러나 이것이 저에게 효과가 없을 것이라는 이유가 있습니다.

그래서 제 질문은 DataContractSerializer가 속성을 무시하도록 만드는 데 사용할 수있는 속성이나 무언가가 있습니까?



답변


답변

또한 DataContractSerializer는 [Serializable]로 표시된 항목을 직렬화하고 익명 유형 직렬화를 지원할 수 있도록 .NET 3.5 SP1 이상에서 표시되지 않은 유형을 직렬화합니다.

따라서 멤버가 직렬화하지 못하도록하는 방법은 클래스를 어떻게 장식했는지에 따라 다릅니다.

  • 을 사용한 경우 속성에 [DataContract]대해을 제거하십시오 [DataMember].
  • 을 사용한 경우 속성 필드 앞에 [Serializable]추가 합니다.[NonSerialized]
  • 수업을 꾸미지 않았다면 [IgnoreDataMember]속성에 추가해야 합니다.

답변

XML 직렬화에서 [XmlIgnore] 특성 (System.Xml.Serialization.XmlIgnoreAttribute)을 사용하여 클래스를 직렬화 할 때 속성을 무시할 수 있습니다.

이것은 당신에게 유용 할 수 있습니다 (또는 XML에서 직렬화 할 때 속성을 무시하는 방법을 찾으려고 할 때이 질문을 찾은 사람에게 유용 할 수 있습니다).


답변

필드를 [NonSerialized ()] 속성으로 표시해보십시오. 이것은 serializer가 필드를 무시하도록 지시합니다.

https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx


답변

당신이 말하는 내용은 다음 위치의 MSDN 라이브러리에있는 내용과 충돌합니다.

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

언급하신 SP1 기능에 대한 언급이 없습니다.


답변