9

DataContractSerializer은 클래스 및 멤버가 DataContractDataMember 특성으로 표시되도록 요구합니다. 그러나, 제 경우 클래스는 EFPocoAdapater 프레임 워크로 자동 생성되며 이러한 특성은 없습니다.DataContractSerializer : DataContract/DataMember 특성을 사용하지 않고 클래스/멤버를 serialize하는 방법

이러한 특성이없는 상태에서 DataContractSerializer를 사용하여 모든 구성원을 강제로 직렬화 할 수 있습니까? Alexdej에서

:이이 3.5SP1 변경

, 당신은 을보고 희망 : http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

답변

6

당신은 할 수 없습니다 - 평범하고 단순하게. 이 특성은 DataContractSerializer에서 어떤 요소를 serialize 할 것인지 결정하는 데 필요합니다. 기본적으로 모든 것을 직렬화하는 XmlSerializer와의 계약에서 (명시 적으로 무시하도록하지 않는 한) DataContractSerializer는 "옵트 인"입니다. - 필드 및/또는 속성 (속성을 통해)을 명시 적으로 지정해야합니다 직렬화한다.

는 UPDATE :으로 여러 사람이 .NET 3.5 SP1과, 지적, 마이크로 소프트는 조금 그 규칙을 완화 - 공공 읽기/속성은 DataContractSerializer에 의해 자동으로 직렬화됩니다 물품. 동시에, 당신의 클래스는 매개 변수없는 기본 생성자가 있어야합니다 - 우리는 돌아 오는 길에 때 XmlSerializer를 위해했던 정확한 요구 사항 같은 소리 .... 물론

이 :

  • 하지 않습니다 비공개로 직렬화 할 수 있습니다. 직렬화하려는 경우 public 읽기/쓰기 속성으로 공개해야합니다.
  • 정의 된 매개 변수 순서를 지정할 수 없습니다. 클래스에 표시되는 순서
  • 이제 클래스에 매개 변수없는 생성자가 필요합니다. fo r deserialization

나는 아직도 이러한 것들이 명백하고 명확해야한다고 생각한다. 더 이상 필요하지 않은 사람들이 게으른/엉성한 프로그래밍을위한 길을 열어 준다. 나는 그것을 좋아하지 않는다. 당신이 원하는 경우에, 당신은 내가이 가능 믿는 ..... 명시 적으로 [DataMember를] 당신의 속성을 표시하지 않고 지금

마크

+0

나는 정말로 네가 틀렸다고 생각했지만, 많은 인터넷 검색 결과 네 말이 맞아. XmlSerializer (Entity Framework에서 작동하는 순환 참조 문제)를 사용할 수 없습니다. 아 잘, 익명의 수업입니다. – aleemb

+1

글쎄, 내가 오늘 이걸 좀 더 읽고 있는데, 여기에 DataContractSerializer에서 사용하는 클래스가 [Serializable]로 표시되어 있다면, 기본적으로 오래된 스타일의 SOAP 포맷터처럼 직렬화 될 것임을 발견했다. 가시성에 관계없이 단일 필드가 포함됩니다. 그게 너 한테 도움이 될 수 있니? –

+0

내 문제는 실제로 자동 생성 클래스를 만질 수 없기 때문에 외부에서 필드를 무시할 수 있어야합니다. 내 linq 쿼리 프로젝션을 사용하여 지금이 잘 작동합니다. – aleemb

0

를 사용할 수 있습니다. ISerializable 인터페이스를 구현하면 serializer가 특성 대신 구현을 사용합니다. 비록 당신이 여전히 클래스 [Serializable]을 표시해야한다고 생각합니다.

속성을 추가하는 것보다 조금 더 효과가 있지만 작동합니다.

0

클래스에 [Serializable] 속성으로 표시하기 만하면됩니다. [NonSerialized]를 사용하여 일련 번호를 표시하지 않으려는 멤버. [Serializable]은 기본적으로 [DataContract]가 [DataMember]로 표시된 필드를 제외한 모든 필드를 직렬화하지 않는 모든 필드를 기본적으로 직렬화합니다.

관련 문제