2009-10-28 2 views
3

속성을 사용하여 도메인 객체를 오염시키지 않으면 서 대부분의 객체에 대해 직렬화 할 수있는 C# 용 XML 직렬 자에 대한 폐쇄 또는 오픈 소스 프로젝트가 있습니까? ? 그러면 내부 generics 클래스로 빌드 된 콜렉션의 직렬화를 처리 할 것인가? 보너스는 인터페이스 유형 등록 정보 직렬화를 처리 할 수 ​​있다는 것입니다. 또 다른 보너스는 당신이 XmlSerializer하지 않는 것을 구체적으로을 어떻게해야합니까 즉, 최초의 "고급"정의가도메인 객체 오염을 필요로하지 않는 고급 XML 직렬화 기

+0

XML을 찾지 못한 경우 JSON.NET을 살펴보십시오. http://www.codeplex.com/Json – Klinger

+0

나는 내가 원한 것을 할 수있는 수많은 JSON 시리얼 라이저가 존재한다는 것을 알았 기 때문에 생각했다.하지만 XSLT (문서 생성)와 XSLT 컴파일 변환을 할 필요가있다. JSON을 변형하려고 시도하는 것이 바람직하지 않습니다. –

+0

기본 XMLSerializer는 좋은 옵션입니다. 기본 동작을 변경하려면 속성 만 있으면됩니다. 회사에서 나는 출력에 관심이 없기 때문에 단일 속성을 두지 않고 복잡한 객체를 직렬화합니다. 실제로 다른 어떤 serializer도 동작을 변경하기 위해 특성을 넣어야 할 것입니다. –

답변

5

음 (내부 표시된 get 접근으로이어야 또는) 속성을 읽기 전용 한 객체를 직렬화 할 수있는 것 있다. POCO의 측면에서 XmlSerializer에는 과 같은 모든 속성을 허용하여 객체 모델에 추가하지 않아도되는 오버로드 된 ctor가 있습니다.하지만 여전히 매개 변수없는 생성자가 필요하며 공개에서만 작동합니다 읽기/쓰기 필드/속성 그리고이 방법을 사용하는 경우 serializer를 캐시/재사용해야합니다.

대부분의 경우 "충분 함"때문에 단순히 대안을 알지 못합니다. 기존 도메인 개체를 DTO로 무차별 적으로 적용하려고 시도하는 것은 종종 실수입니다. 인 새 DTO에 도메인 엔티티를 매핑하는 것이 더 간단하고 유지 관리가 더 쉽습니다 (적절한 ctor/properties/etc를 가짐).

ctor/properties 문제의 경우 DataContractSerializer이고 일부는입니다.하지만 xml이 어떻게 보이는지에 대해서는 세밀하게 제어 할 수 없습니다.

+0

제로 코드로 대부분의 번역 작업을 수행 할 수 있어야하는 AutoMapper를 배웠으므로 오염 된 물체 경로가 가장 좋은 답변 일 수 있다고 생각합니다. –

0
  • System.Xml.dll이 InternalsVisibleToAttribute를 사용하여 내부에 액세스하도록 허용 할 수 있습니다. 따라서 내부 유형 및 내부 멤버를 직렬화합니다. 내부 의사 포함.
  • 클래스에 IXmlSerializable을 구현하여 직렬화를 사용자 정의 할 수도 있습니다 (예 : 인터페이스 참조가 들어있는 컨테이너).
  • 클래스에 XML serialization 특성을 제공 할 필요는 없지만 대신 XmlAttributeOverrides로 제공해야합니다.

XmlSerializer는 거의 항상 사람들이 원하는 것으로, 실제로는 실제로 유연하다는 것을 모릅니다.