Search code examples
c#xmlxml-serializationofx

How do I make XmlSerialiser not start with <?xml ?>?


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?


Solution

  • 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();
        }
    }