2012-10-04 14 views
5

He escrito un código .net para serializar un objeto utilizando la clase XMLSerializer.serializar un objeto .net y omitir el doctype?

public static string serialize(object o) 
    { 
      Type type = o.GetType(); 
      System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);     
      System.IO.StringWriter writer = new System.IO.StringWriter(); 
      serializer.Serialize(writer, o);     
      return writer.ToString();   
    } 

La salida tiene el siguiente aspecto:

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <string>a</string> 
    <string>b</string> 
    <string>c</string> 
</ArrayOfString> 

Eso es grande, pero lo que realmente me gustaría es conseguir que sólo el nodo raíz sin la declaración DOCTYPE XML al principio.

La razón por la que quiero hacer esto es porque me gustaría usar el elemento raíz del objeto XML serializado como parte de otro documento XML.

+0

debo añadir que estoy seguro que podría hacer esto con la manipulación de cadenas, pero esperaba que podría haber una incorporado en el mecanismo para hacer esto. –

+0

Realmente no es una respuesta, pero siempre se puede ir con algo como str.substring (str.indexof ('>') + 1). (No uso C# por lo que no estoy seguro de la sintaxis, pero se entiende) – OneOfOne

+3

El fragmento que nos mostró no tiene ningún tipo de documento. – Joey

Respuesta

10

XmlWriterSettings tiene una propiedad de omitir la declaración XML (OmitXmlDeclaration):

public static string Serialize(object obj) 
{ 
    var builder = new StringBuilder(); 
    var xmlSerializer = new XmlSerializer(obj.GetType()); 
    using (XmlWriter writer = XmlWriter.Create(builder, 
     new XmlWriterSettings() { OmitXmlDeclaration = true })) 
    { 
     xmlSerializer.Serialize(writer, obj); 
    } 
    return builder.ToString(); 
} 
+0

Eso era exactamente lo que necesitaba. ¡Gracias! –

Cuestiones relacionadas