2009-11-20 8 views

Respuesta

114

Para poner esto todos juntos - esto funciona perfectamente para mí:

// 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

usando (var stream = new StringWriter()) se puede cambiar a var stream = new StringWriter(); Otorga un error con el análisis del código ya que es necesario deshacerse de xmlwriter dos veces. – Archna

+0

Necesita '' después del nombre del método. P.EJ. 'SerializeToString ' (StackOverflow no me permite editar menos de 6 caracteres) – derekantrican

12

Puede utilizar XmlWriterSettings y establezca la propiedad OmitXmlDeclaration a cierto como described in the msdn. A continuación, utilice XmlSerializer.Serialize (xmlWriter, objectToSerialize)as described here.

19

Utilice la sobrecarga de método XmlSerializer.Serialize donde puede especificar espacios de nombres personalizados y pasar esto.

var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty }); 
serializer.Serialize(xmlWriter, objectToSerialze, emptyNs); 

pasar gama nulo o vacío no va a hacer el truco

+3

Tenga en cuenta que es necesario combinar con esta respuesta la respuesta de @ tobsen para obtener lo que estaba pidiendo, ¡un xml realmente limpio! – Grzenio

+1

Esto parece ser solo la mitad de la respuesta, la respuesta completa la proporciona Simon Sanderson – Mishax

Cuestiones relacionadas