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?

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top