You've to use the Xmlreader/writer versions. As stated in the manual you have to override HasDataToXmlSerialize and return true in your auditor.
Xml serialization and deserialization is simple for you: when WRITING xml, all you do is produce the XML for the data in the auditor. You don't have to worry about root elements, as the root element, <Auditor> is already emitted to the XML output. So you can just write xml elements to the output with the data you have in the auditor, in the format you like.
When DEserializing, in ReadXml, you get the XmlReader passed in which is placed on the Auditor element. So you can start reading below that and you should stop reading when you receive '</Auditor>'.
As you control the format of the data to output, how you read that back is up to you. In general you can use this pattern for reading the main XML:
// start of your ReadXml()
string startElement = reader.LocalName; // startElement is now 'Auditor'.
while(reader.Read() && !((reader.LocalName == startElementName) && (reader.NodeType == XmlNodeType.EndElement)))
{
// here you read your own elements. Place the data in the instance you're in, as the new auditor instance to deserialize the data in gets the call.
}
// here you return. XmlReader should be on </Auditor>.
For an example of how to read XML using an Xmlreader, please see EntityBase2.XmlToEntity(reader... ).