DataContractSerializer를 사용하여 직렬화 할 때 속성을 무시하려면 어떻게해야합니까?


125

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

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

답변:


176

5
내 도메인 계층에 적절한 어셈블리 참조가 없었고 설명서를 잘못 읽었고 .NET 4.5의 새로운 기능이라고 생각했습니다. 성공하지 않고 내 댓글을 삭제하기 위해이 스레드를 다시 찾으려고했습니다 (서둘 렀습니다). 게다가,이 답변의 날짜를 보면 종소리가 울 렸을 것입니다 .... 2009 .NET 4.5 post ...) 시간을 낭비해서 죄송합니다.
Pluc 2011 년

2
.NET 4.5의 경우 : System.Runtime.Serialization.IgnoreDataMemberAttribute가 모든 작업에 적용됩니다
SparK

1
타사 라이브러리조차도 JSON.NET과 같은 [IgnoreDataMember]에 대한 지원을 추가했습니다.
Doug

5
짧은 예가 실제로 투표의 가치가있는 답변이되지 않을까요?
TaW

1
이 답변은 불완전하므로 오해의 소지가 있습니다. [IgnoreDataMember]클래스에 [Serializable]속성 이 있으면 작동하지 않습니다 . Doug 의 답변에서 자세한 내용을 참조하십시오 .
Alex Fainshtein

165

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

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

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

1
"당신의 수업을 꾸몄다"는 pls는 무엇을 의미 했습니까?
alamin

클래스에서 [DataContract] 또는 [Serializable]과 같은 속성을 사용하지 않은 경우 직렬화하지 않으려는 속성에 [IgnoreDataMember]를 추가합니다. Paul의 답변 또는 checkoutall.com/Blog/Index/201410240204236271/…
Doug

8
이것은 받아 들여진 대답보다 훨씬 더 유익합니다.
pvgoran

해당 멤버를 무시하고 데이터 구조 / 클래스를 계속 직렬화하는 방법이 있습니까?
ryanwebjackson

[Serializable]을 사용할 때 PROPERTY를 제외하는 것은 어떻습니까?
Daniel

31

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

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


4
아 반대표. 클래스를 직렬화 할 때 속성을 무시하는 방법을 검색했을 때이 게시물이 나왔기 때문에 게시 할 것이라고 생각했습니다. 그리고 누군가가 저와 같은 방식으로이 게시물을 찾았다면 여기에 넣고 싶었습니다.
Kris Adams

[메타에서] 나는 XMLSerialization에 대해 다른 (더 especific)를 열어야합니다 때문에 그들이 부정 투표 질문을 생각하고 사람들이 그 질문에 관련성 자신의 검색에서 찾을 것입니다, 그래서 그것을 대답
스파크

8
이 대답은 정확히 내가 찾던 것입니다
aclave1 2014-10-13


0

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

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

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


1
여기에서 문서를 찾을 수 있습니다 (세 번째 단락, 두 번째 문장) : msdn.microsoft.com/en-us/library/ms733127.aspx
NotDan

당신이 게시 한 링크에 대해 맞습니다. 왜 그들이 거기에 그것을 언급하지 않는지 잘 모르겠습니다.
NotDan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.