Comment puis-je faire XmlSerialiser ne pas commencer par Xml?>?
-
22-09-2019 - |
Question
Le format de fichier que je travaille avec (OFX) est XML comme et contient un tas de choses en clair avant que le bit comme XML commence. Il n'aime pas avoir entre le texte brut et des parties XML, donc je me demande s'il y a un moyen d'obtenir XmlSerialiser d'ignorer cela. Je sais que je pourrais passer par le fichier et effacer cette ligne, mais il serait plus simple et plus propre pour ne pas écrire en premier lieu! Toutes les idées?
La solution
Pas trop dur, il vous suffit de sérialisation à un XmlWriter explicitement déclaré et définissez les options sur cet écrivain avant sérialisez.
public static string SerializeExplicit(SomeObject obj)
{
XmlWriterSettings settings;
settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
XmlSerializerNamespaces ns;
ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer serializer;
serializer = new XmlSerializer(typeof(SomeObject));
//Or, you can pass a stream in to this function and serialize to it.
// or a file, or whatever - this just returns the string for demo purposes.
StringBuilder sb = new StringBuilder();
using(var xwriter = XmlWriter.Create(sb, settings))
{
serializer.Serialize(xwriter, obj, ns);
return sb.ToString();
}
}
Autres conseils
Vous devrez manipuler l'objet écrivain XML que vous utilisez lorsque vous appelez Serialize
. Sa propriété Settings
a OmitXmlDeclaration
propriété, que vous aurez envie de mettre à true. Vous aurez également besoin de définir la propriété ConformanceLevel
, sinon le XmlWriter ignorera la propriété OmitXmlDeclaration
.
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlWriter writer = XmlWriter.Create(/*whatever stream you need*/,settings);
serializer.Serialize(writer,objectToSerialize);
writer.close();