2010-03-26 1 views
2

을 던지는 :XmlSerializer를 내가 XmlSerializer가 개체가, 나는 아래의 UnknownElement 및 UnknownAttribute 이벤트 2 이벤트 핸들러를 추가 한 경우 InvalidOperationException

XmlSerializer xs = new XmlSerialiser(typeof(MyClass)); 
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute); 
xs.UnknownElement += new XmlElementEventHandler(xs_UnknownAttribute); 

이 이벤트 핸들러의 각은 기본적으로 같은 일을, 그들은 인쇄 문제를 일으킨 노드 이름 또는 속성 이름

하지만 XML 문서에 오류가 있음을 알리는 InvalidOperationException이 발생합니다. 이러한 오류가 내 이벤트에 걸릴 것이라고 생각 했습니까?

업데이트

예외는 다음과 같습니다

는 예외입니다 : 처리되지 않은 예외 : System.InvalidOperationException : XML 문서 (5, 110)에 오류가 있습니다.

5 행의 'MyTag'시작 태그가 'AnotherTag'의 종료 태그와 일치하지 않는다는 XmlException 유형의 InnerException이 있습니다. Line 5, position 110.

+0

예외와 관련하여 도움을 요청할 때 전체 예외를 게시하는 것이 좋습니다. 예외에 대해 ex.ToString()을 실행 한 결과를 게시하십시오. –

+0

@AndyC : 그것은 전 이유에 대해 물어 본 ex.ToString()의 출력이 아닙니다. –

+0

이전에 비슷한 것을 보았습니다. 가장 근본적인 예외를 파헤 치면서 실제 문제 (일반적으로 잘못된 유형 또는 유형과 관련된 문제)를 파헤 쳤습니다. – leppie

답변

1

MyClass의 정의와 읽으려는 XML을 보지 않고는 명확한 대답을하기가 어렵습니다. 의 구조 때문에이 캡처하지 않습니다

<AnotherTag> 
    <MyTag> 
    </AnotherTag> <--- This should be </MyTag> 
</MyTag>   <--- This should be </AnotherTag> 

UnknownAttribute/UnknownElement 핸들러 : 즉, XML 마크 업이 아니라, 예를 들어 알 수없는 요소 또는 속성을 포함하는보다 형식이 잘못되었습니다 예외의 텍스트는 매우 분명했다 XML은 근본적으로 잘못된 것입니다. 이러한 이벤트는 XML 문서가 노드, 자식 노드, 속성 등의 트리로 성공적으로 파싱 될 때까지 호출 할 수 없습니다.

UnknownAttribute/UnknownElement에 대해 더 자세히 설명하면됩니다. 클래스/XML에 이라는 요소 만 포함하도록 허용 된 경우 Field1Field2 XML에 Field3이라는 요소가있는 경우 UnknownElement 이벤트가 발생합니다. XML이 XML이 아니기 때문에 InvalidOperationException이 발생합니다. 예를 들어 XML이 유효하지 않더라도 XML에 요소가 있기 때문에 UnknownElement 이벤트가 발생합니다.

+0

@Rob 네, 불행히도 xml을 게시 할 수는 없지만 어쨌든 반드시 필요하다고 생각하지는 않습니다. 기본적으로 내가해야 할 일은 여러 곳에서 조작 된 경우에도 형식이 잘못된 곳을 알려주는 것입니다. 예외가 발생하면 읽기가 중단됩니다. 추후 오류가 발생하면 후속 실행 때까지 이러한 오류가 발견되지 않습니다. 그렇습니까? – AndrewC

+0

@AndyC - 예외가 어디에서 발생했는지 정확하게 알려줍니다. :) 일단 문서가 파손되면 이전의 오류로 인해 문서가 잘못 분석 될 수 있으므로 모든 베팅이 해제되므로 " 어디에서 ... 여러 곳에서 "물어 보는 것은 상당히 어려운 일입니다. 확실히 네티켓을 제공하는 .net 프레임 워크에 대해 알고 있습니다. – Rob

+0

아, 잘 말했습니다! 대답 주셔서 감사합니다, 감사합니다. – AndrewC

0

처리중인 두 이벤트는 XML 문서 구조의 오류와 아무 관련이 없습니다.

특정 예외를 게시하면 특정 문제에 대해 도움을 드리겠습니다. 심지어 XML을 게시해야 할 수도 있습니다.


게시 한 부분적 예외의 모양에서 귀하의 문서가 유효하지 않은 XML (일치하지 않는 태그) 인 것으로 보입니다. 이 예외를 잡는 것의 부족을 감지 할 수있는 방법은 없습니다.

+0

@ 존 OP에 대한 업데이트에 예외를 게시했습니다. 예외를 잡을 필요없이 xml 문서 구조에서 오류를 감지 할 수있는 방법이 있습니까? – AndrewC

+0

예외의 스택 추적을 게시 할 수 있습니까? –

관련 문제