내가 설명한 것과 비슷한 문제를 해결하려고합니다. How to check name of element with WriteEndElement다른 내부에서 XmlWriter를 사용하는 방법?
이 코드를 내부 및 외부 XmlWriter로 작성했습니다. 아이디어는 내부 XmlWriter를 닫으면 신뢰할 수없는 타사 라이브러리에 매달린 모든 태그도 닫힙니다.
var sb = new StringWriter();
using (var xml = XmlWriter.Create(sb, new XmlWriterSettings(){Indent = true}))
{
xml.WriteStartElement("root");
using (var inner = XmlWriter.Create(xml))
{
inner.WriteStartElement("payload1");
// simulate ThirdPartyLibrary.Serialise(results, inner) leaving a tag open
inner.WriteStartElement("third-party-stuff");
}
xml.WriteStartElement("payload2");
}
sb.ToString().Dump();
나는이
<root>
<payload1>
<third-party-stuff />
</payload1>
<payload2 />
</root>
생산 것으로 예상하지만 그 대신 나는 <payload2>
InvalidOperationException이
작가가 닫혀 나에 작성해야 라인에서 런타임 오류 오류 상태.
왜이 오류가 발생합니까? 나는 내부 XmlWriter를 닫아서 바깥 쪽을 닫지 않을 것이라고 기대하지 않았다.
는 (결과 내부) 그것은 당신의 ThirdPartyLibrary.Serialise 내부에 폐쇄되지 않는다는 것을 확신; 메서드 호출? – Penfold
@Penfold 좋은 지적. 위 예제를 변경하여 실행할 수 있습니다. –