Sto usando questo metodo per serializzare il mio oggetto:Come controllo la parte <?xml ?> della serializzazione xml con .NET?
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
Rende XML che inizia così:
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Ma voglio farlo sembrare come questo:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Quindi, come posso cambiare la codifica in Windows-1252 e impostare standalone = sì? Inoltre, come si ottiene l'oggetto per escludere il valore xmlns?
Ho visto un paio di domande simili, come this one, ma speravo che potesse essere più semplice per me, magari impostando alcuni attributi da qualche parte?
Aggiornamento 2: dopo aver letto la risposta e i commenti di John e aver pensato di più, ho deciso di creare un secondo metodo. Non credo che la creazione di questo stravagante xml personalizzato solo per una terza parte in una occasione debba essere definita qualcosa di generico come "XmlSerialize" in primo luogo.
Così, ho creato un secondo metodo che accetta un documento XML e prima, rimuove l'elemento di uno spazio dei nomi in questo modo:
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
allora, scrive a XML con il codice di John. Infine restituisce che XML, dopo l'uscita da questo:
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
E questo è brutto, ma mi ottiene esattamente quello che mi serve per questa 3a parte per capire la mia XML.
In realtà, utilizzare 'XmlReader.Create' e' XmlWriter.Create' invece di 'XmlTextReader' e' XmlTextWriter'. Inoltre, devi mettere queste cose in blocchi 'using'. –
Alla fine sono andato con il tuo codice. Ma mi chiedo solo, fino a quando chiudo tutto, non è così buono come usare i blocchi? – Chris
No. I blocchi 'using' assicurano che gli oggetti siano disposti, anche quando si verificano eccezioni. –