2010-12-08 7 views
2

.Net XmlSerializer 클래스를 사용하여 비 직렬화하려고하는 XML 파일이 있습니다. xml 형식을 나타내는 C# 클래스를 사용하는 데 문제가 있습니다. 내 주요 문제는 일반 배열을 나타내는 데 사용되는 하나의 요소를 다루는 것입니다. 배열의 하위 요소가 항상 같지는 않습니다. 또한 배열의 배열에 문제가 있습니다. 읽은 배열은 기본적으로 지원되지 않습니다.XML 배열 비 직렬화

예 :

<root> 
    <parent_1> 
     <sub_element0 value="0"/> 
     <sub_element1> 
      <array idx="0" value="0"/> 
      <array idx="1" value="0"/> 
     </sub_element1> 
    </parent_1> 
    <parent_2> 
     <array idx="0"> 
      <array idx="0"> 
       <sub_element2 value="0"/> 
      </array> 
      <array idx="1"> 
       <sub_element2 value="0"/> 
      </array> 
     </array> 
     <array idx="1"> 
      <array idx="0"> 
       <sub_element2 value="0"/> 
      </array> 
      <array idx="1"> 
       <sub_element2 value="0"/> 
      </array> 
     </array> 
    </parent_2> 
</root> 

어레이 소자는 더 하위 요소 사용 및 (그 자체를 포함하여) 서브 - 엘리먼트 함께 볼 수있다. 나는 '배열'이라는 클래스를 만들 수 없으므로 어떻게 처리 할 수 ​​있습니까?

도움을 주시면 감사하겠습니다.

답변

2

해당 XML에서 xsd.exe를 실행하여 XSD를 만듭니다. 그런 다음 생성 된 XSD에서 xsd.exe/c를 실행하여 직렬화/직렬화 해제 클래스를 작성하십시오. array이라는 클래스를 만들지 않고 array1이라는 클래스를 만든 다음 XML 이름이 "array"인 XmlElementAttribute을 적용합니다.

+0

나는 다음과 같은 오류를 얻을 XML 파일에 xsd.exe를 실행하면 : - 내가 가진 것을하지 않았다 - 두 개의 중첩 관계 – Tony

+0

허에서 자식 테이블 인 DataTable에 '배열'에 제약 조건을 추가 할 수 없습니다 .NET 4 (VS 2010) 버전의 xsd.exe. 어느 쪽을 사용하고 있습니까? –

+0

.NET 2 (VS 2005) – Tony

1

xsd.exe는 노드의 상위 노드와 동일한 이름을 가진 XML 인스턴스를 지원하지 않습니다. 이 경우 동일한 이름을 가진 자식 ('idx'속성으로 구분됨)이있는 '배열'이 있습니다. 이것은 알려진 이슈이며 수년간 알려 졌기 때문에 나는 그것에 숨을 멈추지 않을 것입니다.

나는 오늘 같은 일을 겪었고 해결책을 찾지 못했습니다. 이 페이지를 다시 찾으면 업데이트 할 것입니다.

업데이트 : 내 솔루션은 내 자신의 deserialer 클래스를 작성하는 것이 었습니다.받은 XML은 요소 내에 반복 된 요소가 없었습니다. & c. 나는 XML을 통해 엘리먼트를 끌어 와서 되풀이되는 몇 가지 클래스를 무너 뜨 렸습니다. 매우 빠르고 쉽고 멋졌습니다. 그런 당신을 위해 좋지 않은 경우

그러나,이 시도 :

  1. 다운로드 trang.jar 당신의 XML에
  2. 실행을 (위치 구글()는 XML의 inferrer에서 자바 XSD입니다) XSD/클래스 '

당신은 그렇게해야이'에서와 XSD.exe에

  • 슬랩 당신에게 XSD 파일을 제공
  • 을 trang.jar -jar 자바 '처럼 파일 멋지게 보이지 않는 메팅은 효과가있을 것입니다.