J'ai besoin d'obtenir du XML simple, sans le <?xml version="1.0" encoding="utf-16"?>
au début et xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
dans le premier élément de XmlSerializer
. Comment puis-je le faire?
Pour mettre tout cela ensemble - cela fonctionne parfaitement pour moi:
// 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();
}
}
Utilisez le XmlSerializer.Serialize
surcharge de méthode où vous pouvez spécifier des espaces de noms personnalisés et y passer ceci.
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
passer un tableau nul ou vide ne fera pas l'affaire
Vous pouvez utiliser XmlWriterSettings et définir la propriété OmitXmlDeclaration sur true comme - décrit dans le msdn . Utilisez ensuite le XmlSerializer.Serialize (xmlWriter, objectToSerialize) comme décrit ici .
Cela va écrire le XML dans un fichier au lieu d'une chaîne. Le ticket d'objet est l'objet que je sérialise.
Espaces de noms utilisés:
using System.Xml;
using System.Xml.Serialization;
Code:
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);
}