Мне нужно получить простой xml, без <?xml version="1.0" encoding="utf-16"?>
в начале и xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
в первом элементе из XmlSerializer
. Как я могу это сделать?
Как я могу сделать xmlserializer только сериализацией простого xml?
Ответ 1
Чтобы соединить все это - это отлично работает для меня:
// To Clean XML
public string SerializeToString<T>(T value)
{
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, value, emptyNamespaces);
return stream.ToString();
}
}
Ответ 2
Используйте перегрузку метода XmlSerializer.Serialize
, где вы можете указать собственные пространства имен и передать там это.
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
Передача пустого или пустого массива не приведет к трюку
Ответ 3
Вы можете использовать XmlWriterSettings и установить для свойства OmitXmlDeclaration значение true как описанное в msdn. Затем используйте XmlSerializer.Serialize(xmlWriter, objectToSerialize) как описано здесь.
Ответ 4
Это запишет XML в файл вместо строки. Билет объекта - это объект, который я сериализую.
Используемые пространства имен:
using System.Xml;
using System.Xml.Serialization;
Код:
XmlSerializerNamespaces emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
XmlSerializer serializer = new XmlSerializer(typeof(ticket));
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = true
};
using (XmlWriter xmlWriter = XmlWriter.Create(fullPathFileName, settings))
{
serializer.Serialize(xmlWriter, ticket, emptyNamespaces);
}