The file format I'm working with (OFX) is XML-like and contains a bunch of plain-text stuff before the XML-like bit begins. It doesn't like having between the plain-text and XML parts though, so I'm wondering if there's a way to get XmlSerialiser to ignore that. I know I could go through the file and wipe out that line but it would be simpler and cleaner to not write it in the first place! Any ideas?
+6
A:
You'll have to manipulate the XML writer object you use when calling the Serialize
method. Its Settings
property has a OmitXmlDeclaration
property, which you'll want to set to true. You'll also need to set the ConformanceLevel
property, otherwise the XmlWriter will ignore the OmitXmlDeclaration
property.
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();
Welbog
2009-09-09 13:31:18
Apologies; turns out that the ConformanceLevel part makes serializer.Serialize throw an exception. So I've yanked that 'accept' out from under you! :) You still get an upvote, of course, and a 'thank you'!
Ben Hymers
2009-09-09 14:03:18
+4
A:
Not too tough, you just have to serialize to an explicitly declared XmlWriter and set the options on that writer before you serialize.
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();
}
}
Philip Rieck
2009-09-09 13:32:34