2009-11-20 11 views

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

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

+0

'' 'dopo il nome del metodo. PER ESEMPIO. 'SerializeToString ' (StackOverflow non mi consente di eseguire una modifica inferiore a 6 caratteri) – derekantrican

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

+3

prega di notare che è necessario combinare questa risposta con @ La risposta di tobsen per ottenere ciò che stavo chiedendo - un xml davvero pulito! – Grzenio

+1

Questa sembra essere solo la metà della risposta, la risposta completa è fornita da Simon Sanderson – Mishax