DataContractSerializer 대 XmlSerializer : 각 serializer의 장단점


84

내 데스크톱 응용 프로그램은 XmlSerializer. DataContractSerializer대신 레버리지 를 제안 받았습니다 .
어떤 시나리오에서 사용해야 DataContractSerializer합니까?

많은 감사

코멘트.
1. 출력 XML 파일이 로컬에 저장됩니다. 다른 응용 프로그램은 해당 XML 파일에서 개체를 역 직렬화하지 않습니다.
2. 내 응용 프로그램은 .NET Framework 3.5 SP1에서 실행됩니다.


답변:


112

Dan Rigsby는 이것에 대한 궁극적 인 게시물을 가지고 있습니다-가서 읽어보세요!

XmlSerializer 대 DataContractSerializer (웹 아카이브)

그는 말할 수있는 모든 것을 매우 설득력있는 방식으로 말합니다.

요컨대 :

XmlSerializer :

  • 오랫동안 주변에 있었다
  • "선택 해제"입니다. ([XmlIgnore])하지 않으면 모든 공개는 직렬화됩니다.

DataContractSerializer는 다음과 같습니다.

  • 마을의 새로운 아이
  • 속도 최적화 (일반적으로 XmlSerializer보다 약 10 % 빠름)
  • "opt-in"- [DataMember]직렬화 될 것으로 특별히 표시 한 항목 만
  • 그러나로 표시된 모든 [DataMember]것은 직렬화됩니다.public 또는private
  • XML 속성을 지원하지 않음 (속도상의 이유로)

2
@ Paul-SebastianManole : DataContractSerializer는 속도상의 이유로 XML 속성을 지원하지 않습니다. 자세히 설명해야 할 것은 무엇입니까?
marc_s

6
@ Paul-SebastianManole : 소스 XML에 XML 요소 (예 <Customer Id="42"> ...
:)

2
MSDN에서 가져온 것입니다 . XmlSerializer 클래스는 DataContractSerializer 클래스보다 훨씬 더 좁은 형식 집합을 지원하지만 결과 XML을 훨씬 더 많이 제어 할 수 있으며 XML 스키마 정의 언어 (XSD) 표준을 훨씬 더 많이 지원합니다. 또한 serializable 형식에 대한 선언적 특성이 필요하지 않습니다. XmlSerializer 클래스는 데이터 계약 형식을 지원하지 않습니다. MSDN .
Paul-Sebastian Manole

1
@OO :하지 선택 하에서, .NET 3.5 SP1 및 최신 -하지만 나를 위해, 그것은 여전히의 좋은 방법 일을. 그렇지 않으면 설정할 수없는 속성을 설정할 수 있습니다 (예 : 직렬화 순서, 네임 스페이스 등)
marc_s

17
DataContractSerializer에 대한 가장 큰 경고-역 직렬화 할 때 요소의 순서를 고려하고 올바른 순서가 아닌 경우 자동으로 실패합니다. Imho, 양쪽 끝에서 똑같은 어셈블리를 사용하지 않는 한 이것은 사용할 수 없을 정도로 위험합니다.
Pxtl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.