public override void Close()
{
if (_currentState != State.Closed)
{
try
{
if (_writeEndDocumentOnClose)
{
while (_currentState != State.Error && _elemTop > 0)
{
WriteEndElement();
}
}
else
{
if (_currentState != State.Error && _elemTop > 0)
{
//finish the start element tag '>'
try
{
AdvanceState(Token.EndElement);
}
catch
{
_currentState = State.Error;
throw;
}
}
}
if (InBase64 && _rawWriter != null)
{
_rawWriter.WriteEndBase64();
}
_writer.Flush();
}
finally
{
try
{
if (_rawWriter != null)
{
_rawWriter.Close(WriteState);
}
else
{
_writer.Close();
}
}
finally
{
_currentState = State.Closed;
}
}
}
}