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?

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top