Сначала убедитесь, что каталог существует, вы можете использовать:
Directory.CreateDirectory(@"c:\directory\subdirectory");
Вы не должны проверять, существует ли каталог.
Простой способ преобразовать публичные классы в XML - использовать следующий фрагмент:
public static string ToXml<T>(T obj)
{
using (var ms = new MemoryStream())
using (var sr = new StreamReader(ms))
{
var xmlSer = new XmlSerializer(typeof(T));
xmlSer.Serialize(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
return sr.ReadToEnd();
}
}
Тогда вы можете просто использовать следующий код для записи в файл:
var xmlString = Util.ToXml(report);
File.WriteAllText(@"path", xmlString);
(этот пример без обработки ошибок)
Кроме того, в вашем коде вы забыли закрыть / удалить TextWriter. Я бы порекомендовал использовать оператор using для вас.