2009-07-17 4 views
2

최근에 MSDN에서 IXmlSerializable 인터페이스 정보를 읽었으며 전체 종료 태그 문제에 대해 약간 혼란스러워했습니다.XmlSerialization - 끝 요소 태그 읽기?

IXmlSerializable을 구현하는 경우 종료 태그를 쓸 필요는 없지만 읽어야합니까? 예 : 내 클래스 A가 종료 태그

<A> 
    <i>32</i> 
</A> 

하지만 내가 InvalidOperationException이 얻을 여기에 종료 태그를 읽을하려고하면 내용이

<A i="32"/> 

인 경우 발생을 읽을 수없는 경우 다음과 같은 오류 것입니다. 하지만 제가 읽고있는 내용을 확인하기 위해 계속 읽는다면 독자의 입장을 크게 높이 지 않을 것입니다.

IXmlSerializable 자식 (다양한 형식이 될 수 있음)과 IXmlSerializable 요소의 컬렉션을 처리해야 할 때 작업중인 코드가 좀 더 복잡해 졌기 때문에 약간의 손실이 발생했다고 생각합니다. .

+0

나는 당신이있는 곳이었습니다. 그런 다음 Linq에서 XML로 전환했습니다. – Will

+0

Linq 감사를 사용하지 않으려는. 부분적으로는 필자의 라이브러리가 .NET 2.0과 호환되기를 바라며, 부분적으로는 느린 성능으로 인해 Linq가 다른 곳에서 사용되는 것을 피했기 때문에 부분적으로는 그렇다. – Ian

답변

1

XmlReaderXPathNavigatorIsEmptyElement이라는 속성을 구현합니다. 문서에서

:

파생 클래스에서 재정의

, 현재 노드가 끝 요소 태그가없는 빈 요소인지 여부를 나타내는 값을 가져옵니다.

그래서 당신은 IsEmptyElement 경우 true 당신이 최종 요소 이벤트를 보지한다, 시작 요소 이벤트를 볼 때. 시작 요소 이벤트는 해당 경우의 시작과 끝 모두 역할을합니다.

+0

정보 주셔서 감사합니다. IsEmptyElement가 의미하는 바를 오해 한 것 같습니다. 요소의 속성이 비어 있지 않다는 것을 의미한다고 가정했지만 잘못된 것입니다. – Ian

+0

이 답변은 도움이되었습니다, 감사합니다. 나는 이안 (Ian)과 똑같은 잘못된 가정을했다. 나는 그 재산이 직관적으로 지명되지 않는다고 생각한다. –

2

나는 XmlReader.IsEmptyElement을 떠 올립니다. 시작 태그에서 이것이 설정되면 <a />이됩니다. 설정되어 있지 않으면 <a></a>입니다. 후자는 끝 태그를 읽고, 앞 태그는 끝 태그를 읽지 않습니다.

-1

나는 종료 태그를 판독하지 약이 비트는 개체가 큰 구조에 포함되어있는 시나리오에 대한 생각 :

public class Wrapper { 
    public A Wrapped; 
} 

<Wrapper> 
    <Wrapped><i>32</i></Wrapped> 
</Wrapper> 

난 당신이 <Wrapped></Wrapped>하지만 </Wrapper>를 읽을해야합니다 기대합니다.

+0

downvote의 이유는 무엇입니까? –

+0

나는 누군가가 당신의 코멘트가 잘못되었다고 생각하고 있다고 생각하니? (나는 투표하지 않았다.) – Ian

+0

내가 잘못한 부분을 알고 있으면 반복하지 않으므로 좋을 것입니다. –