Wie mache ich XmlSerializer mit nicht starten Xml?>?
-
22-09-2019 - |
Frage
Das Dateiformat I mit (OFX) bin arbeiten, ist XML-like und enthält eine Reihe von Klartext-Sachen vor dem XML-like Bit beginnt. Es ist nicht wie wenn zwischen dem Klartext und XML Teilen, so dass ich frage mich, ob es einen Weg gibt, zu erhalten XmlSerialiser dass zu ignorieren. Ich weiß, dass ich durch die Datei gehen könnte und diese Linie auszulöschen, aber es wäre einfacher und sauberer sein, es nicht in erster Linie zu schreiben! Irgendwelche Ideen?
Lösung
Nicht zu hart, man muss nur die Serialisierung zu einem explizit erklärt XmlWriter und die Optionen auf diesem Schriftsteller, bevor Sie serialisiert wird.
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();
}
}
Andere Tipps
Sie werden die XML-Writer-Objekt manipulieren müssen Sie verwenden beim Aufruf der Serialize
Methode. Seine Settings
Eigenschaft hat eine OmitXmlDeclaration
Immobilien, die Sie auf true gesetzt werden soll. Sie werden auch die ConformanceLevel
Eigenschaft festlegen müssen, da sonst die XmlWriter die OmitXmlDeclaration
Eigenschaft ignorieren.
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();