XML Serialization of List<T> - XML Root XML Serialization of List<T> - XML Root xml xml

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;}