2011-02-28 4 views
0

C#을 사용하여 다양한 소스의 XML을 일반 유형의 객체로 deserialize하고 싶습니다. XML에는 동일한 스키마가 없습니다. 예를 들어 다음 xml에서 /thingContainer/thing/namewidget/@title은 모두 myClass.DisplayName으로 매핑됩니다.다른 스키마가있는 XML을 공유 유형으로 비 병렬화

Xml1 :

<thingContainer> 
    <thing> 
     <name>MyName</name> 
    </thing> 
</thingContainer> 

Xml2 : 내 XML의 소스에 따라 다를 수 있기 때문에

<widget title="myTitle" /> 

그래서, 나는, [XmlElement] 내 클래스를 표시 할 수 없습니다. 상속 또는 다른 소스에서 XML을 쉽게 deserialize 할 수있는 일부 도우미 클래스로 할 수있는 트릭이 있습니까? 클래스 필드를 xpath에 매핑하는 쉬운 방법이 있습니까?

물론 내가해야한다면 XML을 수동으로 deserialize하고 파싱 할 것이지만 그게 무슨 재미인가? 바로 마음에 봄

답변

1

두 가지 생각 :

  • 사용 XSLT는 개체 모델과 일치하는 중간 형식으로 원본 XML을 변환하는 (매우 인기있는 접근 방식을, 개인적으로 XSL을 경멸하지만)
  • 만들기 중간 객체 모델을 역 직렬화 한 다음 최종 객체 모델에 매핑합니다.

아마도 일부 XmlElement 해커가있을 수 있지만 어수선한 방법 일 것 같습니다.

0

나는 여기에 두 가지 옵션이 있다고 생각 :

  1. 클래스에 대한 IXmlSerializable을 구현하고 계정으로 XML의 구조를 가지고 역 직렬화를
  2. 그냥 XML을 구문 분석의 인스턴스를 생성 XML에 LINQ를 사용 너의 수업. 이것이 제가 선택한 방법입니다 (첫 번째 선택을 자신있게하고 좋아하지는 않음)
관련 문제