XML Serialization of List<T> - XML Root
There is a much easy way:
public XmlDocument GetEntityXml<T>(){ XmlDocument xmlDoc = new XmlDocument(); XPathNavigator nav = xmlDoc.CreateNavigator(); using (XmlWriter writer = nav.AppendChild()) { XmlSerializer ser = new XmlSerializer(typeof(List<T>), new XmlRootAttribute("TheRootElementName")); ser.Serialize(writer, parameters); } return xmlDoc;}
If I understand correctly, you want the root of the document to always be the same, whatever the type of element in the collection ? In that case you can use XmlAttributeOverrides :
XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attr = new XmlAttributes(); attr.XmlRoot = new XmlRootAttribute("TheRootElementName"); overrides.Add(typeof(List<T>), attr); XmlSerializer serializer = new XmlSerializer(typeof(List<T>), overrides); List<T> parameters = GetAll(); serializer.Serialize(xmlWriter, parameters);
A better way to the same thing:
public XmlDocument GetEntityXml<T>(){ XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attr = new XmlAttributes(); attr.XmlRoot = new XmlRootAttribute("TheRootElementName"); overrides.Add(typeof(List<T>), attr); XmlDocument xmlDoc = new XmlDocument(); XPathNavigator nav = xmlDoc.CreateNavigator(); using (XmlWriter writer = nav.AppendChild()) { XmlSerializer ser = new XmlSerializer(typeof(List<T>), overrides); List<T> parameters = GetAll<T>(); ser.Serialize(writer, parameters); } return xmlDoc;}