Я думаю, что последняя строка должна быть
return XDocument.Parse(sb.ToString());
И это может быть идея полностью исключить сериализатор, должно быть легко создать XDoc напрямую из List<>
. Это дает вам полный контроль над результатом.
Грубо:
var xDoc = new XDocument( new XElement("Engagements",
from eng in allEngs
select new XElement ("Engagement",
new XAttribute("Name", eng.Name),
new XElement("When", eng.When) )
));