2009-12-08 2 views
2

XML을 사용하려면 일반적으로 필요한 데이터를 나타내는 클래스/클래스를 설계해야합니다. 그런 다음 XmlSerializer을 사용하여 XML을 읽고 다시 작성합니다.클래스를 XML로 직렬화 및 비 직렬화하는 것보다 XML에 대한 Linq의 이점이 있습니까?

이렇게하면 XML이 "메모리에있는"반면 강력한 형식의 클래스를 사용할 수 있습니다.

물론 이러한 클래스에는 문제없이 Linq를 사용할 수 있습니다.

XML에 Linq를 사용해야합니까? 그렇다면 이유는 무엇입니까?

내 경우에는 강한 타이핑을 제거하는 것만으로 서버에있는 것처럼 보입니다!

답변

0

내가 너라면 취한 접근 방식을 고수 할 것입니다. 잘 이해할 수있는 바퀴를 다시 구현할 필요가 거의 없으며 직렬화로 무엇을하려고하는지 이해하고 있습니다. 무엇보다 중요한 것은 주변 문제를 파악하여 작업 환경을 구현할 때주의를 기울여야합니다. L2XML로 변경하면 일반적인 불필요한 위험이 발생할 수 있습니다.

0

당신이 원하는대로 달라집니다. 직렬화 및 비 직렬화를 원하는 것처럼 들리는데,이 경우 현재 접근 방식을 고수하십시오. 프로젝션을 사용하여 완전히 다른 XML을 만드는 것과 같은 고급 기능을 수행해야하는 경우 LINQ to XML은 매우 유용합니다.

이전에 XSLT를 고려한 곳에서 LINQ to XML을 자주 사용합니다. 내 경험에 의하면 개발자는 XSLT를 이해하는 것보다 훨씬 쉽게 LINQ to XML을 이해합니다.

2

기본 XML 직렬화 API를 사용하면 커다란 이점을 얻을 수 있습니다. 몇 가지 직렬화/직렬화 코드 행을 제외한 거의 모든 작업을 수행하지 않고도 객체를 지속 할 수 있습니다. .

그러나 단점도 있습니다. 예를 들어, 내가 아는 한 XML 직렬화는 공용 속성에서만 작동합니다. 프라이빗 속성의 값을 유지하려면 직렬화 논리를 직접 작성해야합니다. 또한 결과 XML의 정확한 스키마와 형식이 중요하다면 내장 된 XML 직렬화를 사용하여 달성하기가 어려울 수 있습니다.

Linq to XML은 쿼리 로직을 사용하여 XML에서 객체를 생성하는 기능은 물론 생성 된 XML을 효과적으로 제어하지만 출력에 특별한 요구 사항이없는 일반 직렬화의 경우 표준 API를 준수해야합니다. .

+0

내장 된 직렬화가 버전 관리를 처리하지 않는다는 사실은 말할 것도 없습니다. –

+0

버전 관리 관련 : 새 버전의 개체에 필수 필드를 추가하지 않고 OptionalField 특성 (System.Runtime .Serialization)을 사용하면 내장 된 직렬화를 활용할 수 있습니다. –

+0

공용 속성 - 데이터 구조를 사용하여 XML 및 개체를 모델링하여 데이터 구조의 동작을 캡슐화하면 좋을 것입니다. 데이터 구조 = 데이터; 개체 = 데이터 + 동작. – Aaron

관련 문제