Ho bisogno di ottenere semplici xml, senza <?xml version="1.0" encoding="utf-16"?>
all'inizio e xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
nel primo elemento da XmlSerializer
. Come posso farlo?Come posso fare in modo che xmlserializer serializzi semplicemente xml normale?
41
A
risposta
114
Per mettere tutto questo insieme - questo funziona perfettamente per me:
// To Clean XML
public string SerializeToString(T value)
{
var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, value, emptyNamepsaces);
return stream.ToString();
}
}
12
È possibile utilizzare XmlWriterSettings e impostare la proprietà OmitXmlDeclaration al vero come described in the msdn. Quindi utilizzare il parametro XmlSerializer.Serialize (xmlWriter, objectToSerialize)as described here.
19
Utilizzare il sovraccarico del metodo XmlSerializer.Serialize
in cui è possibile specificare spazi dei nomi personalizzati e passare lì.
var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs);
passando array null o vuoto non farà il trucco
utilizzando (var stream = new StringWriter()) può essere modificato in var stream = new StringWriter(); Fornisce un errore con l'analisi del codice mentre cerca di eliminare xmlwriter due volte. – Archna
'' 'dopo il nome del metodo. PER ESEMPIO. 'SerializeToString ' (StackOverflow non mi consente di eseguire una modifica inferiore a 6 caratteri) –
derekantrican