Come faccio a fare in modo che XmlSerialiser non inizi con <?xml ?>?
-
22-09-2019 - |
Domanda
Il formato file con cui sto lavorando (OFX) è simile a XML e contiene un sacco di elementi di testo semplice prima che inizi la parte simile a XML.Tuttavia, non gli piace avere tra le parti di testo normale e XML, quindi mi chiedo se esiste un modo per fare in modo che XmlSerialiser lo ignori.So che potrei esaminare il file e cancellare quella riga, ma sarebbe più semplice e pulito non scriverla in primo luogo!Qualche idea?
Soluzione
Non troppo difficile, devi solo serializzare un XmlWriter esplicitamente dichiarato e impostare le opzioni su quello scrittore prima di serializzare.
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();
}
}
Altri suggerimenti
Dovrai manipolare l'oggetto writer XML che usi quando chiami il file Serialize
metodo.Suo Settings
la proprietà ha un OmitXmlDeclaration
proprietà, che dovrai impostare su true.Dovrai anche impostare il file ConformanceLevel
proprietà, altrimenti XmlWriter ignorerà il file OmitXmlDeclaration
proprietà.
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();