Я не получаю объявление XML, когда выполняю ваш код. Сериализация List<int>
дает мне:
<Int32_LIST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<int>5</int>
<int>7</int>
<int>2</int>
</Int32_LIST>
Обратите внимание, что «декларация XML», на которую ссылается OmitXmlDeclaration
, обычно похожа на:
<?xml version="1.0" encoding="UTF-8" ?>
Если вместо этого вы ссылаетесь на части xmlns
, то они называются «XML пространство имен объявления» и могут быть устранены путем инициализации экземпляра XmlSerializerNamespaces
пустым пространством имен по умолчанию, и передавая его вашему Serialize
методу:
XmlSerializer ser = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(typeof(T).Name + "_LIST"));
var namespaces = new XmlSerializerNamespaces(new[] { new XmlQualifiedName("", "") });
ser.Serialize(writer, entities, namespaces);
Ниже приведена сокращенная реализация, которая достигает того же результата, что и ваш код:
public String GetEntityXml<T>(List<T> entities)
{
var sb = new StringBuilder();
var settings = new XmlWriterSettings { OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create(sb, settings))
{
XmlSerializer ser = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(typeof(T).Name + "_LIST"));
var namespaces = new XmlSerializerNamespaces(new[] { new XmlQualifiedName("", "") });
ser.Serialize(writer, entities, namespaces);
}
return sb.ToString();
}